我有一个在不同线程中执行某些功能的类。我想在我的MonoTouch应用程序中测试这个类。所以我在测试项目中添加了一个测试夹具。我发现MonoTouch不会等待测试结束,它只是说测试用例仍在运行时它是“成功的”。案例如下:
[Test]
public void ThreadTest()
{
Timer ApplicationTimer = new Timer {Enabled = true, Interval = 2500};
ApplicationTimer.Elapsed += ApplicationTimer_Tick;
}
private void ApplicationTimer_Tick (object sender, ElapsedEventArgs e)
{
Assert.Fail("failing"); // by the time the debugger hits this point, the UI already says that all tests passed. which is totally wrong.
}
任何帮助将不胜感激。
答案 0 :(得分:3)
这不是MonoTouch特定的问题 - 该测试在所有测试人员中都会失败。
等待此异步事件的测试可能如下所示:
private ManualResetEvent _mre = new ManualResetEvent(false);
[Test]
public void ThreadTest()
{
Timer ApplicationTimer = new Timer {Enabled = true, Interval = 2500};
ApplicationTimer.Elapsed += ApplicationTimer_Tick;
if (!_mre.WaitOne(3000))
{
Assert.Fail("Timer was not signalled");
}
}
private void ApplicationTimer_Tick (object sender, ElapsedEventArgs e)
{
_mre.Set();
}
但是你必须非常小心地编写这种测试,以确保你没有锁定线程,跨测试重用对象等。