有一个方法如下 -
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");
}
由于
答案 0 :(得分:1)
如果您想使用PowerMockito,您可以轻松完成that
@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();
答案 1 :(得分:1)
如果你确实需要测试调用(而不仅仅是它的效果,你可以做的是在测试类中引入工厂方法。
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);
}
}
答案 2 :(得分:0)
你可以尝试这样的事情。
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;
}
};
}
}