java - 在 when() 中将文件传递给 JUnit 测试
问题描述
我正在尝试编写单元测试用例,其中我需要传递在单元测试用例类中创建的文件以供使用。我已经使用@Before 创建了该文件。但我无法理解如何传递我在单元测试中创建的文件,以便 obj 将该文件用于进一步执行。
public class Core {
@Bean
public SomeObject obj(){
String fileName = "Some file name";
String r = FileUtils.readFileToString(new File(fileName));
}
}
@RunWith(SpringRunner.class)
@ContextConfiguration
public class CoreTest extends TestCase {
File file ;
@Before
public void init() throws IOException {
file = new File("myFile.txt");
file.createNewFile();
}
@After
public void cleanUp()
{
file.delete();
}
@Test
public void testFunction() {
Core obj1 = new Core();
File file = Mockito.mock(File.class);
FileUtils f = Mockito.mock(FileUtils.class);
try {
Mockito.when(f.readFileToString(file)).thenReturn(str); //exception thrown here
SomeObject o = obj1.obj();
} catch (Exception e) {
e.printStackTrace();
}
assertNotNull(obj);
这抛出
org.mockito.exceptions.misusing.MissingMethodInvocationException:
when() requires an argument which has to be 'a method call on a mock'.
解决方案
根据我的理解,它应该是这样的:
try {
Mockito.doReturn(str).when(f).readFileToString(Mockito.any());
SomeObject o = obj1.obj();
} catch (Exception e) {
e.printStackTrace();
}
因为这样你告诉 Mockito 它必须拦截哪个方法调用并用所需的返回值替换。
推荐阅读
- angular - 无法绑定数据源,因为它不是表的已知属性 - angular4
- excel - 如何将此一维数组转置到另一个工作表?
- mongodb - Kafka 与 mongo oplog 连接
- html - 使用引导程序将复选框与其他输入组件垂直居中
- javascript - Typescript 接口,为动态第二个属性引用一个实例属性
- laravel-5 - Laravel - 多对多多态关系
- sql-server - 在 SQL Server T-SQL 中处理货币转换
- ipfs - 更新 IPNS 链接的工作原理
- node.js - 尽管 URL 处理程序未实现,但 Mocha 测试正常
- symfony - 如何在 API 平台中使用“$ref”引用和声明来自 Swagger 的组件?