2012-01-06 84 views
2

我调用传递参数的方法。如果这个参数等于某个特定值,那么一个线程会重复执行一些操作,直到它停止。在每一次重复中,一些值都会改变。
有没有办法从JUnit检查这些值?JUnit测试:如何测试线程的结果

+1

让我们看看一些代码。 – dan 2012-01-06 12:52:22

回答

3

如果你正在产生线程,你不再是单元测试 - 你是集成测试。重构你的代码,以便改变这个'值'的逻辑可以在没有线程产生的情况下被测试。如果它在没有产生线程的情况下工作,那么它会在产生线程时工作(我知道我已经为自己设置了一个讲座...您需要确保您正确地同步任何可能共享的变量,而不要有任何可能导致死锁的代码)。

没有看到代码,很难尝试建议测试它的方法。但是,如果您正在产生线程,则绝对不是单元测试。

+1

我想说,需要一个'tick()'方法来封装单个重复并对其进行单元测试。如果它返回那些“一些值”而不是改变对象的字段,那么测试(和整体解耦)就更好了。 – 2012-01-06 13:00:50

+0

@Victor同意,这是更好的线程行为封装。不过,我希望整个行为单元在我开始勾选' – BeRecursive 2012-01-06 13:02:02

+0

之前进行测试。对不起,没有提供任何代码。这是我大学项目的一部分,我恐怕我不能这样做。我知道我的代码是可以工作的,但是因为我必须在项目中包含一些JUit测试,所以我想知道是否有任何方法来测试这部分代码。我创建一个线程,线程以指定的时间间隔重复。所以,我无法像使用JUnit那样测试它。谢谢! :) – anna 2012-01-06 13:35:29

0

如果您试图测试以确定每个迭代是否适当地修改了这些值,则使用期望的输入调用迭代代码并测试预期的输出。测试每个peice的隔离:

伪Java代码:

for each (file : files) { 
    doSomething(file); // this updates some running totals or something 
} 

然后你想要写一些单元测试,你要测试,看看每个输入打电话给你doSomething()如果值更新适当的(模拟哪里必要)。然后做一个集成测试,让线程产生并检查结果值。