在privateobject中找不到类型的构造函数错误 [英] Constructor on type not found error in privateobject
问题描述
我正在为计算软件编写一个单元测试。在我使用PrivateObject访问私有方法sendNumberToCalculation()的测试用例中,但我得到了类型未找到的错误构造函数。
I'm writing a unit test for calculation software.in test case i used of "PrivateObject" for accessing to private method "sendNumberToCalculation()" , but i get error constructor on type not found.
public class CalculationTest
{
[TestMethod]
public void sendNumberToCalculationTest()
{
// -- Act
PrivateObject obj = new PrivateObject(typeof(Calculation));
Tokenization token = new Tokenization("5*10-18/(3+19)");
PolishNotation polish = new PolishNotation(token.MathExpressionParser());
double expected = 49.19;
// -- Actual
double actual = Convert.ToDouble(obj.Invoke("sendNumberToCalculation", polish));
// -- Assert
Assert.AreEqual(expected, actual);
}
}
public class Calculation
{
private Tokenization token;
private PolishNotation polish;
private Stack<double> numbers = new Stack<double>();
private Stack<string> operators = new Stack<string>();
public Calculation(string expression)
{
token = new Tokenization(expression);
polish = new PolishNotation(token.MathExpressionParser());
}
private double sendNumberToCalculation()
{
int number;
int number1 = 0;
int number2 = 0;
string operatorName = "";
int counter = 1;
foreach (var item in polish.InfixToPostfix())
{
numbers.Push(Convert.ToDouble(item));
if (!int.TryParse(item, out number))
{
operators.Push(item);
while (counter <= 2 && numbers.Count > 1)
{
if (counter == 1)
{
number2 = Convert.ToInt32(numbers.Pop());
}
else if (counter == 2 && operators.Count > 0)
{
number1 = Convert.ToInt32(numbers.Pop());
operatorName = operators.Pop();
}
}
}
operatorDetect(number1, number2, operatorName);
}
var result = numbers.Pop();
return result;
}
private void operatorDetect(int number1, int number2, string operatorName)
{
switch (operatorName)
{
case "+":
Add(number1, number2);
break;
case "*":
Multipy(number1, number2);
break;
case "/":
Divide(number1, number2);
break;
case "-":
Subtract(number1, number2);
break;
}
}
private void Add(int number1, int number2)
{
double number = number1 + number2;
numbers.Push(number);
}
private void Multipy(int number1, int number2)
{
double number = number1 * number2;
numbers.Push(number);
}
private void Subtract(int number1, int number2)
{
double number = number1 / number2;
numbers.Push(number);
}
private void Divide(int number1, int number2)
{
double number = number1 - number2;
numbers.Push(number);
}
}
我的尝试:
i获取错误的构造函数,找不到类型,我想修复它。
What I have tried:
i get error constructor on type not found and i wanna fix it bug.
推荐答案
你的计算
类不包含无参数构造函数。您需要将构造函数参数传递给PrivateObject
构造函数 [ ^ ]:
YourCalculation
class does not contain a parameterless constructor. You need to pass the constructor parameters to thePrivateObject
constructor[^]:
string expression = "5*10-18/(3+19)";
PrivateObject obj = new PrivateObject(
typeof(Calculation), // The type of the object to create
new[] { typeof(string) }, // The type of each parameter
new[] { expression }); // The value for each parameter
您还尝试使用 PolishNotation
类型的一个参数调用 sendNumberToCalculation
方法,但该方法不有任何参数。您需要从调用
调用中删除第二个参数:
You're also trying to invoke the sendNumberToCalculation
method with one parameter of the PolishNotation
type, but that method doesn't have any parameters. You need to remove the second argument from the Invoke
call:
double actual = Convert.ToDouble(obj.Invoke("sendNumberToCalculation"));
我们可以找到错误的屏幕截图吗?
Can we have a screenshot of the error and the line please ?
这篇关于在privateobject中找不到类型的构造函数错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!