Как смоделировать метод с возвращаемым типом void в JMockit?

Я использую TestNG и JMockit для тестирования. Мой код выглядит следующим образом:

public boolean testMethod(String a, String b) {
   //processing .....
   mockClass.mockMethod(a);
   //processing....
}

МакетМетод():

Class MockClass {
     public void mockMethod(String a) {
        //some operations to mock
     }
 }

Я использую MockUp в соответствии с этим вопросом: (Как издеваться над публичной пустотой метод с использованием jmockit?)

Я все еще получаю NPE. Что я делаю неправильно? Кроме того, это потому, что я использую это так?

@Test
public void test() {
   new Expectations() {
       {
       //for statements preceding mockMethod()....
       new MockUp<MockClass>(){
           @Mock
           public void mockMethod(String a) {
               //do nothing
           }
       };
       }
   };
 }

Я поместил его вне Expectations() и также использовал NonStrictExpectations. Как я могу это исправить?


person user2281204    schedule 12.08.2014    source источник
comment
где вы берете НПВ?   -  person iberbeu    schedule 12.08.2014
comment
Вы должны написать тестовый код для двух процессов, поэтому у вас должно быть два метода. 1- MockClass 2-Test для того, где вызывается MockClass?   -  person Serkan Algül    schedule 12.08.2014


Ответы (2)


Если метод, который нужно имитировать, ничего не возвращает, вам не нужно делать ничего особенного в ожиданиях. Вы можете определить свой класс для издевательства, используя аннотации @Injectable или @Mocked обычным способом. При желании вы можете добавить ожидание для проверки количества вызовов метода. Также вы можете добавить шаг проверки, чтобы зафиксировать аргумент «а» и сделать утверждения по этому поводу. См. пример кода ниже.

@Tested
private MyClassToBeTested myClassToBeTested;
@Injectable
private MockClass mockClass;

@Test
public void test() {
    // Add required expectations
    new Expectations() {{
        ...
        ..
    }};

    // Invoke the method to be tested with test values;
    String expectedA = "testValueA";
    String expectedB = "testValueB";
    boolean result = myClassToBeTested.testMethod(expectedA, expectedB);

    // Assert the return value of the method
    Assert.assertTrue(result);

    // Do the verifications and assertions
    new Verifications() {{
        String actualA;
        mockClass.mockMethod(actualA = withCapture()); times = 1;
        Assert.assertNotNull("Should not be null", actualA);
        Assert.assertEquals(actualA, expectedA);
        ...
        ..
    }};

}
person Kelum Senanayake    schedule 04.12.2016

Для насмешки над пустым методом вы можете делать ожидания без каких-либо результатов, как показано ниже:

@Tested
private MyClassToBeTested myClassToBeTested;

@Injectable
private MockClass mockClass;

@Test
public void test() {

    new Expectations() {{
        mockClass.mockMethod(anyString);
    }};

    String inputA = "testValueA";
    String inputB = "testValueB";

    boolean result = myClassToBeTested.testMethod(inputA, inputB);

    assertEquals(true, result);
}
person Hodeifa Baswel    schedule 05.01.2018