2012-03-20 3 views
0

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

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); 
} 

Любая идея, ребята, какие я делаю неправильно?

ответ

0

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

+0

Большое спасибо, как я мог пропустить это! Некоторое время я писал свои тесты. – dchucks

Смежные вопросы