C# 无法将类型void隐式转换为int

C# 无法将类型void隐式转换为int,c#,unit-testing,C#,Unit Testing,我正在为现有项目创建单元测试 n1和n2是输入的数字 op是主程序中开关盒中的操作数 问题在于实际的。我无法匹配预期值和实际值,因为我得到错误无法将void隐式转换为int 我的单元测试: [TestMethod()] public void docalcTest(int actual) { Form1 target = new Form1(); // TODO: Passenden Wert initialisieren double n1 = 15; // TODO:

我正在为现有项目创建单元测试

  • n1
    n2
    是输入的数字
  • op
    是主程序中开关盒中的操作数
问题在于
实际的
。我无法匹配预期值和实际值,因为我得到错误
无法将void隐式转换为int

我的单元测试:

[TestMethod()]
public void docalcTest(int actual)
{
    Form1 target = new Form1(); // TODO: Passenden Wert initialisieren

    double n1 = 15; // TODO: Passenden Wert initialisieren
    double n2 = 3; // TODO: Passenden Wert initialisieren
    int op = 2; // TODO: Passenden Wert initialisieren
    int expected = 5;

    actual = target.docalc(n1, n2, op);

    Assert.AreEqual(expected,actual);
}
docalc的代码:

public void docalc(double n1, double n2, int op)
{
    result = 0;
    setText("clear");

    switch (op)
    {
        case 1:
            result = n1 + n2;
            break;
        case 2:
            result = n1 - n2;
            break;
        case 3:
            result = n1 * n2;
            break;
        case 4:
            result = n1 / n2;
            break;
    }

    setText(result.ToString());
}

您的方法
target.docalc()
是一个void方法,而
actual
是一个int。正如编译器所说,您不能将
void
赋值给
int

根据您的评论(您真的应该编辑您的问题),您的
docalc()
如下所示:

public void docalc(double n1, double n2, int op) 
{   
    result = 0; 

    ...

    setText(result.ToString());
}
您必须将方法的返回类型更改为
int
,然后返回结果:

public int docalc(double n1, double n2, int op) 
{   
    int result = 0; 

    ...

    return result;
}
旁注,你为什么这么做

[TestMethod()]
public void docalcTest(int actual)
{
     ...

    actual = ...
测试方法将在没有参数的情况下调用,因此它在那里有点无用。您可能希望将其更改为:

[TestMethod()]
public void docalcTest()
{
     ...

    int actual = ...

什么是“target.docalc”?
docalc
返回什么?如果您希望它返回任何内容,那么它不能是
void
方法。target.docalc(…)返回什么?我猜是void,这就是为什么会出现这个错误。如果要在使用提供的值之前为方法赋值,那么将
actual
传递到方法中是没有意义的。@Ruud:
docalc
似乎有严重的设计缺陷。它实际上并不返回计算结果,而是调用另一个函数,该函数无疑是UI绑定的,用于显示计算结果。这与UI紧密耦合,不能单独测试(这正是您试图做的)。业务逻辑应该与UI解耦,以便对其进行测试。我知道我不能将void与int一起使用。在执行“[TestMethod()]public void docalcTest()时{…int-actual=…'也不起作用。已经尝试过了,同样的错误。这就是为什么要这样看。谢谢advance@Ruud再次阅读我的答案。关于
intactual
声明的注释不是答案,它改变了
docalc()的返回类型
方法是。好的,明白了。谢谢。这意味着现在应该更改整个代码:)@Ruud这是正确的。你应该创建一个单独的类来进行计算,而不是让表单来做。然后你在需要的地方实例化该类的一个新实例。谢谢你的帮助。只需稍作更改就解决了我的问题