执行摘要:当线程中抛出断言错误时,单元测试不会消失.这是有道理的,因为不应该允许一个线程崩溃另一个线程.问题是我如何1)在第一个辅助线程崩溃时使整个测试失败,或者2)循环并确定每个线程完成后的状态(参见下面的代码).执行后者的一种方法是通过具有每线程状态变量,例如"boolean [] status"并且具有"status [i] == false"意味着线程失败(这可以被扩展以捕获更多信息).但是,这不是我想要的:我希望它在抛出断言错误时就像任何其他单元测试一样失败.这甚至可能吗?这是可取的吗?
我感到无聊,我决定在我的单元测试中产生一堆线程,然后让它们调用一个服务方法,只是为了它.代码看起来大致如下:
Thread[] threads = new Thread[MAX_THREADS];
for( int i = 0; i < threads.length; i++ ) {
threads[i] = new Thread( new Runnable() {
private final int ID = threadIdSequenceNumber++;
public void run() {
try {
resultRefs[ID] = runTest( Integer.toString( ID ) ); // returns an object
}
catch( Throwable t ) {
// this code is EVIL - it catches even
// Errors - don't copy it - more on this below …Run Code Online (Sandbox Code Playgroud) 如何证明多线程在我的C#程序中有效?这是针对测试要求的.例如,我将不得不在记录器类中添加一些锁定(是的,我知道,我不应该编写自己的日志类),我需要一个测试用例来证明更改是有效的.