Как использовать макет одного класса внутри другого, чтобы JUNIT тестировал пустой метод для захвата аргументов? - PullRequest
0 голосов
/ 09 января 2019

Здесь у меня есть класс A, который реализует method1.

class A{
    public void method1(String name){
        classB b = new classB();
        // Some operations
        b.method2(argument1); 
    }
}

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

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

class ATest{
    String name = "name";
    @Before
    public void setup{
        class A = new class A();
        class B = Mockito.mock(classB.class);
    }

    public void testmethod1()
    {
        A.method1(name);

        ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);

        Mockito.verify(B, Mockito.times(1)).method2(captor.capture());

        String actual = captor.getValue();
        assertEquals("some data", actual);        
    }
}

1 Ответ

0 голосов
/ 09 января 2019

Class B должна быть зависимостью Class A, чтобы вы могли правильно ее смоделировать. Или это может быть параметром.

Class A{
 public final B b;
 public A(B b){
  this.b = b
 }
 public void method1(String name){
  // Some operations
  b.method2(argument1); 
 }
}

затем в вашем тестовом прохождении в макете, когда вы создаете экземпляр class A

class ATest{
    private B b;
    private A a;
    @Before
    public void setup{
     b = Mockito.mock(B.class);
     a = new A(b);
    }
    // tests...
}
...