在privateobject中找不到类型的构造函数错误 [英] Constructor on type not found error in privateobject

查看:148
本文介绍了在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 构造函数 [ ^ ]:

Your Calculation class does not contain a parameterless constructor. You need to pass the constructor parameters to the PrivateObject 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆