Unit testing 异常被存根后Mockito存根不工作
因此,我尝试在各种场景中对类进行单元测试。我们使用JUnit V4。Unit testing 异常被存根后Mockito存根不工作,unit-testing,junit,mockito,junit4,stubbing,Unit Testing,Junit,Mockito,Junit4,Stubbing,因此,我尝试在各种场景中对类进行单元测试。我们使用JUnit V4。 我有一个设置方法,其中我重新发布模拟以返回预期的模拟值。 我有4个测试:test1-test4。test1、test2与perTestSetup方法中配置的预期模拟值配合良好 测试t3需要MockClass抛出一个异常,所以我在t3中单独配置了它。现在t3工作正常,因为模拟会按预期抛出异常 但是,当perTestSetup在运行test4之前尝试重置mock以返回mockResult时,它失败并抛出t4中配置的相同运行时异常。
我有一个设置方法,其中我重新发布模拟以返回预期的模拟值。 我有4个测试:test1-test4。test1、test2与perTestSetup方法中配置的预期模拟值配合良好 测试t3需要MockClass抛出一个异常,所以我在t3中单独配置了它。现在t3工作正常,因为模拟会按预期抛出异常 但是,当perTestSetup在运行test4之前尝试重置mock以返回mockResult时,它失败并抛出t4中配置的相同运行时异常。在perTestSetup()中进行模拟之前,我还尝试了reset()。但这也同样失败 我错过了什么
@Before
public void perTestSetup(){
when(MockClass.functionCall(...)).thenReturn(mockResult);
}
@Test
public void test1(){
}
@Test
public void test2(){
}
@Test
public void test3(){
when(MockClass.functionCall(...)).thenThrow(new RuntimeExcption());
...
}
@Test
public void test4(){
}
您的perTestSetup()方法没有执行您认为它正在执行的操作。@Before注释意味着测试环境将在执行任何测试之前运行此方法一次,而不是每次测试运行一次。在我读完您的问题之前,我真的很想建议您将此方法重命名为simply setup(),因为这将是一个更准确的描述
选项:
在看不到你的课程细节的情况下,我怀疑第二种选择是我想要的。不过,这三种方法都值得一试,看看哪一种对您来说最直观。我在perTestSetup()中添加了一条日志行,用于在每次测试之前验证它是否执行。所以这个假设是正确的:2。不幸的是,参数是相同的。3.该类在DI上下文中使用,因此创建单独的mock似乎有些过分。无法将大量代码作为其组织共享。具体:——|。如果我没有得到答案,我将把它转换成一个通用的作品。
when(MockClass.functionCall(good values)).thenReturn(mockResult);
when(MockClass.functionCall(bad values)).thenThrow(new RuntimeException());
MockClass successfulMockClass = new mock(MockClass.class);
when(successfulMockClass()).thenReturn(mockResult);
MockClass unsuccessfulMockClass = new mock(MockClass.class);
when(unsuccessfulMockClass()).thenThrow(new RuntimeException());