我有一个简单的C#
班级Calculate
,其中包含方法Plus
:
public class Calculate
{
private int value1 = 2;
private int value2 = 4;
private int result;
public void Plus(int _value1, int _value2)
{
value1 = _value1;
value2 = _value2;
result = value1 + value2;
}
public int Result
{
get { return result; }
}
}
并生成单元测试如下:
[TestClass()]
public class CalculateTests
{
[TestMethod()]
[Timeout(1000)]
public void PlusTest()
{
Calculate calc1 = new Calculate();
int counter = 0;
while (true)
{
counter++;
Random rnd = new Random();
int x1 = rnd.Next(0, 10);
int x2 = rnd.Next(0, 10);
calc1.Plus(x1,x2);
int expected = 10;
int actual = calc1.Result;
string message = string.Format("{0} + {1} = {2} at {3} repetion", x1, x2, actual, counter);
Assert.AreNotEqual(expected, actual, message);
}
}
该测试检查两个随机整数的总和是否等于10.并且重复1秒。
问题是我应该如何设置超时或修改测试,以便如果在超时期间没有发生条件x1 + x2 == 10
,则认为测试成功执行。
答案 0 :(得分:0)
它会检查测试的持续时间是否低于给定值,因此您无法以您希望的方式使用它。 你已经写出了退出测试的实际条件。
而不是while(true)
,为什么不使用:
var endDate = Datetime.Now + Timespan.FromSeconds(1);
while(DateTime.Now < endDate)
{
// ... check there
}
正如你所看到的here,没有你所寻找的东西。为什么呢?
是的,while(true)
is an anti-pattern和其他例子:
这意味着: