我试图为一个扩展了抽象类的类编写一个单元测试,但是测试仍然试图调用真正的抽象方法。有没有办法注入一个模拟的抽象类并验证是否调用了抽象方法?
测试
public class TestThisClassTest {
@Tested
TestThisClass testThisClass;
@Injectable
String names;
@Injectable
String username;
@Injectable
char[] password = {'t', 'e', 's', 't', 's'};;
@Injectable
String destinationName;
@Injectable
AbstractClass abstractClass; // Thought this would inject but it's not
@Test(description = "Verify that sendMessageAbstractMethod is called")
public void testSendMessage(@Mocked ObjectMessage message) throws Exception {
testThisClass.sendMessage(message); // This is instantiating AbstractClass when it shouldn't be
new Verifications(){{
abstractClass.sendMessageAbstractMethod((Object) any);
times = 1;
}};
}
}
testthisclass.class类
public class TestThisClass extends AbstractClass {
public TestThisClass() {
super();
}
@Inject
public TestThisClass(String names, String username, char[] password, String destinationName) {
super(names, username, password, destinationName);
}
public void sendMessage(Object message) throws Exception { // Trying to test this method
sendMessageAbstractMethod(message); // This is "doing stuff." Need it verify this is called and move on
}
}
抽象类
public abstract class AbstractClass {
public AbstractClass(String names, String username, char[] password, String destinationName) {
this.names = names;
this.username = username;
this.password = password;
this.destinationName = destinationName;
}
protected void sendMessageAbstractMethod(Object message) throws Exception {
//do stuff
}
}
2条答案
按热度按时间disbfnqx1#
这应该起作用:
}
k2fxgqgv2#
用间谍解决了这个问题