2013-03-26 85 views
0

我正在编写一个应用程序,它向串行端口发送一些命令并从中接收一些响应。在有些命令发送到端口调用线程时的某个时刻应该被锁定,直到收到一些响应。所以我试图为它写一个失败的测试。测试是否调用函数锁定当前线程

问题是测试不能在任何时候完成以便通过!!!!!

那么解决方案是什么?

编辑: 我可以在我的测试中创建另一个线程,并等待例如两秒钟后,检查线程没有完成,但它打破了简单的法则,并使测试及时。

+1

为什么你的单位阻止呢?您应该能够注入阻止代码,并强制它阻止/不会随意阻止(以及解除阻止超时)。我想你没有注入所有的依赖。 – Tejs 2013-03-26 20:47:43

+0

@Tejs我从你的评论中得到的是,我可以创建另一个类来处理锁定。所以当我想要功能阻止时,我可以使用该类。我也可以在单元测试中嘲笑那个类并注入它。谢谢。 – 2013-03-26 20:58:48

+2

你打算如何处理竞赛条件?也就是说,如果在测试之前从串行端口*读取的代码完成*以查看锁是否运行,该怎么办?或者如果从串行端口*读取的代码在测试之后才开始,以查看是否执行了锁定,那么该怎么办? – 2013-03-26 21:23:48

回答

1

试图让锁定一段时间,你认为它是不合理的,之后你停止尝试获取锁定并失败它?

使用类似Monitor.TryEnter

+0

这是一个解决方案,但它使测试及时。还使用Monitor.TryEnter使测试依赖于生产代码。 – 2013-03-26 20:31:35