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这是正确的。你应该创建一个单独的类来进行计算,而不是让表单来做。然后你在需要的地方实例化该类的一个新实例。谢谢你的帮助。只需稍作更改就解决了我的问题