【发布时间】:2018-12-11 17:54:25
【问题描述】:
我有一个 Spring Boot 批处理应用程序,它使用程序参数来获取一些文件并对其进行操作。该应用程序运行良好,但我在运行 junit 测试时遇到问题。 这是我的代码:
@Component
public class ApplicationArguments implements InitializingBean {
@Autowired private org.springframework.boot.ApplicationArguments appArgs;
private String filePath;
@Override
public void afterPropertiesSet() throws Exception {
filePath = appArgs.getSourceArgs()[0];
}
}
这个 bean 被另一个 bean 用来构建完整路径:
@Component
public class InitPaths implements InitializingBean {
@Autowired private ApplicationArguments myAppArgs;
private String fullPath;
@Override
public void afterPropertiesSet() throws Exception {
fullPath = myAppArgs.getFilePath(); //this will be null when launching tests
fullPath.toString();//this will throw a NullPointerException if we run the test
}
}
应用程序使用此命令可以正常工作:
java -jar myApp.jar fileName.txt
是否有任何解决方案可以将相同的参数传递给 junit 测试?
我尝试使用模拟,但我遇到了同样的问题:
@RunWith(SpringRunner.class)
@SpringBootTest
public class BatchTest {
@MockBean
ApplicationArguments applicationArguments;
@Autowired
@InjectMocks
InitPaths initPaths;
@Before
public void before() {
when(applicationArguments.getFilePath()).thenReturn("myCustomFile.dat");
}
@Test
public void contextLoad() {
}
}
这是错误:
Invocation of init method failed; nested exception is java.lang.NullPointerException
【问题讨论】:
-
尽量不要
@InjectMocks注解,它不需要SpringRunner.class。 -
感谢@borino 的回复。我试过了,但我遇到了同样的问题。