Добавление дополнительной информации, когда время ожидания JUnit 4 с параметризованным бегуном

Я запускаю тест JUnit 4, используя @RunWith(value = Parameterized.class). Это работает нормально, никаких проблем нет. Однако, когда любой из моих 34 тестов истекает, я получаю только сообщение java.lang.Exception: test timed out after 15000 milliseconds. Я хочу, чтобы он также показывал параметр теста.

Я даже пытался сделать это, как в приведенном ниже коде (который, как я знаю, является ужасным решением для большинства случаев, я просто хотел посмотреть, смогу ли я вообще показать сообщение в любое время), но это не сработало, это все еще привело к сообщению выше.

private String parameter;

@Test(timeout = 15000)
public void solveAll() {
    try {
        // ... do something that might take a long time
    }
    catch (Throwable e) {
        Assert.fail(this.parameter + " failed! Because of " + e.getMessage());
    }
}

Как я могу заставить JUnit также показывать this.parameter, когда тест заканчивается тайм-аутом?

Вот очень простой пример тестового класса, который показывает эту проблему:

public class ShowMyMessageTest {
    @Test(timeout=1000)
    public void test() {
        try {
            Thread.sleep(3000);
        }
        catch (Throwable e) {
            Assert.fail("Timeout reached with value 42");
        }
    }
}

С этим ShowMyMessageTest я иногда получаю ожидаемое «Время ожидания достигнуто со значением 42», а иногда я получаю только «java.lang.Exception: время ожидания теста истекло через 1000 миллисекунд». В этом случае я хочу всегда получать «Тайм-аут достигнут со значением 42».


person Simon Forsberg    schedule 23.12.2012    source источник


Ответы (1)


Это немного хак, но вы можете использовать @After для проверить состояние параметра:

@RunWith(Parameterized.class) public class FooTest {
  private boolean flag = true;
  private String param;

  public FooTest(String param) {
    this.param = param;
  }

  @Test(timeout = 1000) public void test() {
    while(true == flag);
    param = null;
  }

  @After public void after() {
    Assert.assertNull("Problem:" + param, param);
  }

  @Parameters public static Collection<Object[]> params() {
    Object[][] params = { { "foo" } };
    return Arrays.asList(params);
  }
}

Альтернативой является написание собственного раннера.

person McDowell    schedule 24.12.2012