我有一个java应用程序(里面没有Spring),我想用集成测试来测试它。
我的主要用例是主要功能,它使用指定的输入在数据库上执行一些操作并向两个不同的服务(一个 SOAP 和一个 REST)发送一些请求。
现在我有一个有效的 JUnit 配置(分为单元测试和集成测试)+ io.fabric8:docker-maven-plugin,它在集成测试期间使用 docker 映像作为数据库。
我想做的是为这两个服务添加模拟,特别是用于直接调用外部服务的方法。
最大的问题是我有这样的结构:
class A{
Result mainFunction(Request r){
....
B b = new B(params);
b.logEvent(someParameters)
....
}
}
class B{
int logEvent(Object someParameters){
....
NotifierHandler nh = new NotifierHandler(param1);
nh.sendNotification(json);
....
}
}
我在哪里:
class NotifierHandler{
String sendNotification(Json j){
...
[call to REST service with some parameters]
...
...
[call to SOAP service with some parameters]
...
}
}
我需要什么:A.mainFunction(r)在测试环境中调用,用 FakeNotifierHandler 替换 NotifierHandler 和/或更改方法的行为sendNotification()。
实际问题:现在使用 Mockito 和 PowerMock 时遇到的问题是,我无法使用 FakeNotifierHandler 全局直接更改类 NotifierHandler。同样尝试改变该方法的行为。
特别是,我需要的是创建一个
class FakeNotifierHandler{
String sendNotification(Json j){
...
[save on an HashMap what I should send to the REST service]
...
...
[save on another HashMap what I should send to the SOAP service]
...
}
}
阅读我尝试过的所有示例,我只看到了更改方法返回值的简单示例,而不是更改一个类的一个方法的行为,该方法被另一个类和另一个我用作集成测试起点的类所使用。
注意:可能有一种快速的方法可以做到这一点,但我对这种类型的测试(Mockito,PowerMock,...)非常陌生,并且我没有找到这种特殊奇怪情况的示例。
繁星coding
相关分类