【发布时间】:2018-04-21 02:40:40
【问题描述】:
说,在 C# 控制台应用程序中,有一个简单的函数,如下所示-
public int MaxValue(int? i1, int? i2)
{
if (i1>=i2)
return i1;
else
return i2;
}
如果字符串作为参数传递,我想从 Maxvalue() 抛出异常;单元测试功能如下-
[Test]
public void test1()
{
Assert.Throws<ArgumentException>(()=> ob.MaxValue("A", "B"));
}
但是将字符串作为参数传递给 MaxValue() 来代替整数是不可能的。那么,我该如何测试呢?
【问题讨论】:
-
string不能作为int?参数传递。您的问题应该是'如何对无法编译的代码进行单元测试?' -
@SergeyBerezovskiy 没有。用户是否输入错误是我的测试用例之一。该示例只是为了简单起见。我想阻止用户这样做并测试代码。
-
@JabinTonni 所以展示你的情况。单元测试应该测试功能。在您的代码中,您无法从“A”生成 int,因此代码无法将“A”转换为 int。
-
@JabinTonni 没有。这个例子不是为了简单。这是一个误导性的例子
-
@SergeyBerezovskiy,我花了一段时间才理解您的建议“我如何对不编译的代码进行单元测试”。我找到了关于使用反射的建议。我在单元测试中只有一天大,所以请原谅我的例子。非常感谢您的建议。我将参数写为“int?”因为我的其他测试用例之一是将空值传递给函数。但我的理解是我不应该尝试修改代码来运行我的测试。如果你建议我一个更简单的反射教程,那就太好了。
标签: c# unit-testing exception nunit