如果要与特定情况相匹配的测试,我想停止执行测试,以避免代码重复。
请考虑以下情况:
CoreProviderTest
public void executeCoreSuccess(Object responseModel){
assertNotNull("Response successful", responseModel != null);
if (responseModel == null) {
//Kill Test
}
}
ChildProviderTest -扩展了CoreProviderTest
@Test
public void responseTester() {
new Provider().getServiceResponse(new Provider.Interface() {
@Override
public void onSuccess(Object responseModel) {
executeCoreSuccess(responseModel);
//Continue assertions
}
@Override
public void onFailure(ErrorResponseModel error) {
executeCoreFailure(error);
}
});
}
对于null响应,我想在CoreProviderTest中杀死我当前的测试用例,否则可能会触发其他断言中的异常。我想避免这样的事情:
CoreProviderTest
if (responseModel == null) {
return true;
}
ChildProviderTest
@Override
public void onSuccess(Object responseModel) {
if (executeCoreSuccess(responseModel))
return;
//Continue assertions
}
有没有办法终止Mockito,JUnit或Roboletric的当前测试执行?到目前为止,没有运气来搜索答案。
预先感谢
答案 0 :(得分:1)
如果您使用的是JUnit5,则它具有“假设”,“禁用测试”和“条件测试执行”之类的功能。 这是链接:
https://junit.org/junit5/docs/current/user-guide/#writing-tests-assumptions
在您的情况下,似乎假设那应该可行。这是API: https://junit.org/junit5/docs/5.0.0/api/org/junit/jupiter/api/Assumptions.html#assumingThat-boolean-org.junit.jupiter.api.function.Executable-
希望有帮助。
谢谢。
答案 1 :(得分:0)
JUnit Assumptions非常适合给定的情况。
代码段现在类似于:
CoreProvider
public void executeCoreSuccess(Object responseModel){
assumeTrue("Response successful",responseModel != null);
}
根据JUnit文档:
失败的假设并不意味着代码已损坏,而是 测试没有提供有用的信息。假设基本上是指“不要运行 如果这些条件不适用,请执行此测试”。默认的JUnit运行器 跳过假设失败的测试。
+1 Adelin和Dossani