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

时间:2013-06-12 13:30:10

标签: c# unit-testing

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

  • n1n2是输入数字
  • op是主程序
  • 中的开关案例中的操作数

问题在于actual。我无法匹配预期值和实际值,因为我收到错误cannot implicitly convert void to 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());
}

2 个答案:

答案 0 :(得分:4)

您的方法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 = ...

答案 1 :(得分:0)

我猜docalc返回void ...将返回类型更改为int,你应该没问题