服务java中的模拟资源(mockito)
我正在为导出类做一些测试 我需要模仿一个方法,所以我做了一个模仿(我是新来的模仿) 及 我需要模拟getPath()方法,就像我在TestNG中所做的那样服务java中的模拟资源(mockito),java,mockito,Java,Mockito,我正在为导出类做一些测试 我需要模仿一个方法,所以我做了一个模仿(我是新来的模仿) 及 我需要模拟getPath()方法,就像我在TestNG中所做的那样 public class ExportTestNG(){ public textExport(){ Service serviceMock = Mockito.mock(Service.class); Mockito.when(serviceMock.getData()).thenReturn("theNew
public class ExportTestNG(){
public textExport(){
Service serviceMock = Mockito.mock(Service.class);
Mockito.when(serviceMock.getData()).thenReturn("theNewPath");
System.out.println("serviceMock.getData() : " + serviceMock.getData()); // prints "theNewPath", OK
exportService.export(); // the getData() is not the mockito one
}
}
我可能没有纠正mockito,也可能不理解它是如何工作的。
有什么想法吗?您需要将模拟服务连接到exportService对象中。 如果您有服务成员变量的setter,请执行以下操作:
exportService.setService(serviceMock);// add this line.
exportService.export();
如果没有setter,则需要在调用export之前执行连接。
这方面的选择包括:
- 使用反射设置服务成员变量的值
- 编写服务的仅测试版本,并使用spring配置xml文件的仅测试版本
- 其他事情(我从未做过,因此不知道)
exportService.setService(serviceMock);// add this line.
exportService.export();
如果没有setter,则需要在调用export之前执行连接。
这方面的选择包括:
- 使用反射设置服务成员变量的值
- 编写服务的仅测试版本,并使用spring配置xml文件的仅测试版本
- 其他事情(我从未做过,因此不知道)
@RunWith(MockitoJUnitRunner.class)
public class ExportTestNG(){
@InjectMocks
private ExportServiceImpl exportService;
@Mock
private Service serviceMock;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
public textExport(){
Mockito.when(serviceMock.getData()).thenReturn("theNewPath");
exportService.export();
}
}
您可以使用Mockito为您注入mock,并避免添加setter方法
@RunWith(MockitoJUnitRunner.class)
public class ExportTestNG(){
@InjectMocks
private ExportServiceImpl exportService;
@Mock
private Service serviceMock;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
public textExport(){
Mockito.when(serviceMock.getData()).thenReturn("theNewPath");
exportService.export();
}
}
可能重复的可能重复的非常感谢!这真的很有帮助!“只编写服务的测试版本”否!然后,您测试的是从未使用过的代码,而不是正在使用的代码。浪费时间。仅测试版本的服务是为了支持exportService的测试,就像使用模拟库一样。被测试的代码不是该服务的仅测试版本,而是使用该服务的仅测试版本的类。啊,那么是一个模拟服务。这通常就是它的名称。非常感谢!这真的很有帮助!“只编写服务的测试版本”否!然后,您测试的是从未使用过的代码,而不是正在使用的代码。浪费时间。仅测试版本的服务是为了支持exportService的测试,就像使用模拟库一样。被测试的代码不是该服务的仅测试版本,而是使用该服务的仅测试版本的类。啊,那么是一个模拟服务。这通常被称为+1。添加一个只在测试中使用的setter是一个讨厌的习惯PI除了在exportService中添加InjectMock外,还需要添加Autowired,它可以正常工作!你不需要initMocks调用,Though@RunWith涵盖了这一点。+1添加仅在测试中使用的setter是一个令人讨厌的习惯PI除了在exportService中添加InjectMock外,还需要添加Autowired,它可以正常工作!你不需要initMocks调用,Though@RunWith涵盖了这一点。