我没有在我的代码中拥有来自回调的TestNG单元测试失败

时间:2013-03-02 02:36:09

标签: java testng surefire

I previously asked如何使线程池中的单元测试失败。

@Test
public void foo() throws Exception {
    ScheduledThreadPoolExecutor stpe = new ScheduledThreadPoolExecutor(1);
    stpe.submit(new Runnable() {
        @Override
        public void run() {
             // does not make this unit test fail :(
             Assert.AssertEquals(1, 2);
       }
    });
}

我接受的解决方案是阻止返回的Future并获取。但在我的实际设置中,我既没有线程池也没有提交调用 - 这是一个最终来自MINA的回调。

关于我最好的想法是搞乱全局默认异常处理程序,但看起来非常糟糕。

Maven万无一失,如果重要的话。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我的问题在这里:TestNG Make assert in multithread way (not run in multithread)

这是我的解决方案:

作为java pass方法的参数引用,所以我写了一个ResultWrapper类

public class ResultWrapper {

    boolean result;

    public boolean getResult()
    {
        return result;
    }

    public void setResult(boolean result)
    {
        this.result = result;
    }
}

我没有在public void run()中创建任何断言,而是将结果放入ResultWrapper:resultWrapper.setResult(actual == expectedAssert);

(ResultWrapper传递给在Constructor中调用Runnable类的类)

我在这样的测试方法中断言outside:

@Test

public void assign_assign_release_release() throws ClientProtocolException, IOException, InterruptedException{

        assignUntilSuccess();
        releaseUntilSuccessAndExpect(1);
        Assert.assertTrue(resultWrapper.getResult());
    }

希望这会有所帮助。