【问题标题】:JUnit a method with while loop and Async featureJUnit 一种具有 while 循环和异步功能的方法
【发布时间】:2021-08-02 18:51:50
【问题描述】:

我在测试以下方法时遇到问题:

public class SomeClass {

  
    public void methodForTesting() {

        new Thread(() -> {
            SomeClass.stopSomething();
            while(SomeClass.getSomethingState() != SomethingState.DONE) {
                TimeUnit.sleep(5);
            }
            SomeClass.startSomething();
        });
    }

前面有 SomeClass 的方法是在没有这个添加的情况下编写的,但我在这里写它是为了表明它们是这个类的一部分。 我不确定如何使用这种方法,而这个 while 循环让我很烦恼。

【问题讨论】:

    标签: java spring-boot unit-testing junit


    【解决方案1】:

    要(覆盖)测试此方法,您必须深入研究 (Power-)

    正常情况SomeClass.getSomethingState() == SomethingState.DONE 或其他)应该很容易测试:

    您想要验证,SomeClass.stopSomething()SomeClass.getSomethingState()SomeClass.startSomething() 已被调用(按此“顺序”)。

    对于异常情况(到达),您可以指示/模拟做任何(-/否)事情并返回您需要的(对于任何(以及外部)类/对象):

    例如在SomeClass.getSomethingState() 上也可以在Thread.sleep(anyIntger()) 上。

    ...

    您还可以模拟和验证更复杂的事情。例如。 (Instuct)SomeClass.getSomethingState() 在(不是)DONE 中产生 x 次,然后在 x+1st 时间发生变化,然后相应地验证(stop-/start-/doSomething())(使用基数和参数!)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      相关资源
      最近更新 更多