Создаваемый внутри метода метод Mock Objects создан для проверки переданных аргументов. - PullRequest
0 голосов
/ 23 мая 2018

Имеется следующий метод -

Class A
{

public void methodA(String zipcode)

{

  Country c= new Country(zipcode) 

}

}

Можно ли с помощью JUnit проверить, что объект страны был создан с аргументом zipcode.

Метод тестирования будет примерно таким же, как

@Test
public void testMethod()
{
  A a = new A();  
  a.methodA("testCode");
}

Спасибо

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

Если вы хотите использовать PowerMockito, вы можете сделать это легко, например ,

@RunWith(PowerMockRunner.class)
@PrepareForTest(X.class)
public class XTest {
        @Test
        public void test() {
                whenNew(MyClass.class).withNoArguments().thenThrow(new IOException("error message"));

                X x = new X();
                x.y(); // y is the method doing "new MyClass()"

                ..
        }
}

Использовать PowerMockito.verifyNew, например,

verifyNew(MyClass.class).withNoArguments();
0 голосов
/ 24 мая 2018

Если вам нужно протестировать вызов (в отличие от только его эффектов, вы можете просто ввести фабричный метод в тестируемом классе.

Class A {
    private Function<String,Country> createCountry = Country::new;
    public void methodA(String zipcode) {
          Country c= createCountry.apply(zipCode);
    }
}

, который вы затем можете высмеять.

class ATest {
    @InjectMocks A sut;
    @Mock Function<String,Country> creator;

    @Test public void testCountryCreated() {
        String zipcode = "1234";

        Country country = mock(Country.class);
        when(creator.apply(zipcode)).thenReturn(country);

        sut.methodA(zipcode);

        verify(creator).apply(zipcode);
    }
}
0 голосов
/ 23 мая 2018

Вы можете попробовать что-то вроде этого.

public class MyClass {
static class Country{
    public Country(String zipcode){
        onCountryCreated();
    }
    public void onCountryCreated(){

    }
}

@Test
public static void test() {
    Country cntry = new Country("12345"){
        @Override
        public void onCountryCreated(){
            System.out.println("Created");
            //assert true;
        }
    };
}
}
...