为什么我的第二种方法的模拟会影响第一种方法?
Why is my second method's mock affecting the first method?
我写的class有两个方法,第二个方法包含强制异常模拟。当我 运行 分别测试时,它们都通过了,但是当它们 运行 在一起时,第一个方法中调用了强制异常。我已经尝试过拆解,但是这个方法不可用。
public class LambdaHandlerTest {
@Test
@DisplayName("Testing the handleRequest")
void testTheHandleRequest() throws URISyntaxException, IOException {
new MockUp<ProviderEvents>(){
@Mock
public File fetchFile(String bucket, String jobName, Context context) throws IOException{
File file = new File ("src/test/resources/testEmailFile.txt");
return file;
}
};
new MockUp<AbstractAmazonSimpleEmailService>(){
@Mock
SendEmailResult sendEmail(SendEmailRequest var1){
return null;
}
};
LambdaHandler lambdaHandler = new LambdaHandler();
assertEquals ("Finished handleRequest()", lambdaHandler.handleRequest(generateS3Event(), null));
}
@Test
@DisplayName("Test catch block of handleRequest")
void testCatchBlockHandleRequest() throws IOException, URISyntaxException {
LambdaHandler lambdaHandler = new LambdaHandler();
S3Event s3Event = generateS3Event();
new MockUp<ServiceEvents>() {
@Mock
public Boolean extractJson(S3Event event, Context context) throws Exception {
throw new Exception("Forced Exception");
}
};
assertEquals("Error with handleRequest()", lambdaHandler.handleRequest(s3Event, null));
}
public S3Event generateS3Event() throws URISyntaxException, IOException {
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(Objects.requireNonNull(classLoader.getResource("s3Event.json")).toURI());
S3Event s3Event = new ObjectMapper().readValue(file, S3Event.class);
return s3Event;
}
}
如有任何帮助,我们将不胜感激。
除了有两种方法之外,您可以将第二种方法用于第一种方法,并检查是否执行了两个断言语句
我不确定为什么会发生这种情况,但最后我使用了@order 来确保使用抛出强制异常的模拟进行的测试是最后 运行。成功了。
我写的class有两个方法,第二个方法包含强制异常模拟。当我 运行 分别测试时,它们都通过了,但是当它们 运行 在一起时,第一个方法中调用了强制异常。我已经尝试过拆解,但是这个方法不可用。
public class LambdaHandlerTest {
@Test
@DisplayName("Testing the handleRequest")
void testTheHandleRequest() throws URISyntaxException, IOException {
new MockUp<ProviderEvents>(){
@Mock
public File fetchFile(String bucket, String jobName, Context context) throws IOException{
File file = new File ("src/test/resources/testEmailFile.txt");
return file;
}
};
new MockUp<AbstractAmazonSimpleEmailService>(){
@Mock
SendEmailResult sendEmail(SendEmailRequest var1){
return null;
}
};
LambdaHandler lambdaHandler = new LambdaHandler();
assertEquals ("Finished handleRequest()", lambdaHandler.handleRequest(generateS3Event(), null));
}
@Test
@DisplayName("Test catch block of handleRequest")
void testCatchBlockHandleRequest() throws IOException, URISyntaxException {
LambdaHandler lambdaHandler = new LambdaHandler();
S3Event s3Event = generateS3Event();
new MockUp<ServiceEvents>() {
@Mock
public Boolean extractJson(S3Event event, Context context) throws Exception {
throw new Exception("Forced Exception");
}
};
assertEquals("Error with handleRequest()", lambdaHandler.handleRequest(s3Event, null));
}
public S3Event generateS3Event() throws URISyntaxException, IOException {
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(Objects.requireNonNull(classLoader.getResource("s3Event.json")).toURI());
S3Event s3Event = new ObjectMapper().readValue(file, S3Event.class);
return s3Event;
}
}
如有任何帮助,我们将不胜感激。
除了有两种方法之外,您可以将第二种方法用于第一种方法,并检查是否执行了两个断言语句
我不确定为什么会发生这种情况,但最后我使用了@order 来确保使用抛出强制异常的模拟进行的测试是最后 运行。成功了。