我想通过模拟
Service
类的重写方法 testB1Method2
来测试我的 a1Method2
类方法 B1
。我不想改变课堂上的任何内容A1
和B1
。我正在使用mockito 1.9.0和powermockito 1.4.12。我正在尝试以下代码:
UnitTestService 类:
import static org.mockito.Mockito.*;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.powermock.api.mockito.PowerMockito;
import org.testng.Assert;
import org.testng.annotations.Test;
public class UnitTestService {
@Mock
B1 b1;
@InjectMocks
Service service = new Service();
@Test
public void testB1Method2() throws Exception {
MockitoAnnotations.initMocks(this);
when(b1.a1Method2()).thenReturn("mockvalue");
PowerMockito.whenNew(B1.class).withArguments(Mockito.any()).thenReturn(b1);
String output = service.serviceMethod();
System.out.println("=====" + output);
Assert.assertTrue("mockvalue".equalsIgnoreCase(output), "testA1Method2 failed!");
}
}
服务等级:
public class Service {
public String serviceMethod() {
B1 b1 = new B1("some data");
return b1.a1Method2();
}
}
A1级:
public abstract class A1 {
public A1(String data) {
//doing many thing with data
}
public String a1Method1() {
return "from a1Method1";
}
public String a1Method2() {
return "from a1Method2";
}
}
B1级:
public class B1 extends A1 {
public B1(String data) {
super(data);
}
@Override
public String a1Method1() {
return "a1Method1 from B1 class";
}
}
我正在 eclipse 中使用 testNG 运行类
UnitTestService
。这里,类 B1 a1Method2
中的实际方法被调用,因为它在控制台中打印“=====from a1Method2”。即:这里似乎mockito无法模拟这个方法。
我应该在
UnitTestService
类中进行哪些代码更改来模拟类 B1 a1Method2
?
您在那里创建了难以测试的代码,绝对没有充分的理由。 让你脖子受伤的是在你的服务舱中对new B1的小小的呼叫。
如果您要对该对象使用依赖注入;那么你绝对不需要处理 powermock 和模拟继承的方法。因为这样你就可以简单地创建一个“模拟”B1;将其传递给您的服务;然后您就可以完全控制测试期间将发生的情况。
因此,这里可行的替代方案可能是通过简单地改进生产代码以使其更易于测试来避免复杂的测试设置。
观看这些视频以更好地理解我在说什么!