Проблема EasyMock с использованием addThrow для исключения - PullRequest
0 голосов
/ 20 марта 2012

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

FAILED: getPriceDataAccessThrowsRuntimeException
org.testng.TestException: 
Expected exception java.lang.RuntimeException but got org.testng.TestException: 
Expected exception java.lang.RuntimeException but got java.lang.AssertionError: 
  Unexpected method call DataAccess.getPriceBySku("3283947"):

Ниже приведен код теста:

@Test
public void getPrice() throws Exception {
    // Set expectations on mocks.
    expect(mockedDependency.getPriceBySku(SKU)).andReturn(new BigDecimal(100));

    // Set mocks into testing mode.
    replay(mockedDependency);
    final BigDecimal price = systemUnderTest.getPrice(SKU);
    assertNotNull(price);

    // Verify behavior.
    verify(mockedDependency);
}

@Test(expectedExceptions = MyCustomException.class)
public void getPriceNonExistentSkuThrowsException() throws Exception {

    // Set expectations on mocks.
    expect(mockedDependency.getPriceBySku(BAD_SKU)).andReturn(null);

    // Set mocks into testing mode.
    replay(mockedDependency);
    final BigDecimal price = systemUnderTest.getPrice(BAD_SKU);
}

@Test(expectedExceptions = RuntimeException.class)
public void getPriceDataAccessThrowsRuntimeException() throws Exception {

    // Set expectations on mocks.
    expect(mockedDependency.getPriceBySku(SKU)).andThrow(new RuntimeException("Fatal data access exception."));

    // Set mocks into testing mode.
    replay(mockedDependency);
    final BigDecimal price = systemUnderTest.getPrice(SKU);
}

Есть идеи, ребята, что я делаю не так?

1 Ответ

0 голосов
/ 20 марта 2012

Похоже, вы ошиблись при конвертации из JUnit в TestNG. В связанном примере метод doBeforeEachTestCase запускается перед каждым тестовым случаем, и это сбрасывает смоделированную зависимость в ее базовое состояние. Вы не включили весь код: у вас должно быть doBeforeEachTestCase с аннотацией с BeforeMethod, чтобы запустить его с TestNG.

...