标签: mockito

抛出异常而不是返回默认值

我是Mockito的新手,想在单元测试中使用它.

我不喜欢的是为没有明确定义行为的方法创建的Mockito.mock(Class<T>)返回默认值(如null)的模拟.相反,我希望他们在这种情况下抛出一个异常,所以我知道我需要添加这个定义.

我尝试了以下方法:

SomeType m = mock( SomeType.class, new ThrowsException( new SomeRuntimeException( ... ) ) );
when( m.a() ).thenReturn( ... );

m.a();  // ok
m.b();  // throws exception
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为在调用期间已经抛出了异常when().

有没有其他方法来实现这一目标?

exception-handling mockito

19
推荐指数
1
解决办法
3354
查看次数

论证俘虏mockito

我一直在阅读有关参数捕获者的内容,我读的越多,我就越迷失.有人可以用一个例子解释它的痛苦吗?

java unit-testing mockito

19
推荐指数
1
解决办法
1万
查看次数

是否可以验证在Mockito中以不同线程运行的模拟方法?

我有一个像下面这样的方法,

public void generateCSVFile(final Date billingDate) {
    asyncTaskExecutor.execute(new Runnable() {
        public void run() {
            try {
                accessService.generateCSVFile(billingDate);
            } catch (Exception e) {
                LOG.error(e.getMessage());
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我嘲笑:

PowerMockito.doNothing().when(accessService).generateCSVFile(billingDate);
Run Code Online (Sandbox Code Playgroud)

但是当我验证时:

verify(rbmPublicViewAccessService, timeout(100).times(1)).generateCSVFile(billingDate);
Run Code Online (Sandbox Code Playgroud)

它给了我没有被调用.这是因为它是通过单独的线程调用的,是否可以验证在不同线程中调用的方法?

java mocking mockito powermock

19
推荐指数
2
解决办法
2万
查看次数

我应该使用哪些Maven工件导入PowerMock?

pom.xml为了让PowerMock与Mockito合作,我需要添加哪些罐子?我有以下依赖项:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-all</artifactId>
    <version>1.9.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito</artifactId>
    <version>1.4.11</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-support</artifactId>
    <version>1.4.11</version>
    <scope>test</scope>
 </dependency>
Run Code Online (Sandbox Code Playgroud)

但是当我@PrepareForTest在类级别添加注释时,Eclipse无法找到它,但它可以找到PowerMockito.我错过了什么罐子?

java mockito powermock maven

19
推荐指数
1
解决办法
5万
查看次数

的Mockito; 使用list调用verify方法,忽略列表中元素的顺序

我有一个类(ClassA)来获取目录中的文件.它扫描给定目录中与正则表达式匹配的文件.对于每个匹配的文件,它将文件对象添加到列表中.处理完目录后,它会将文件列表传递给另一个类(ClassB)进行处理

我正在为ClassA编写单元测试,因此使用Mockito模拟ClassB,并将其注入ClassA.然后我想在不同的场景中验证传递给ClassB的列表的内容(即我的模拟)

我已经将代码删除了以下内容

public class ClassA implements Runnable {

    private final ClassB classB;

    public ClassA(final ClassB classB) {
        this.classB = classB;
    }

    public List<File> getFilesFromDirectories() {
        final List<File> newFileList = new ArrayList<File>();
        //        ...
        return newFileList;
    }

    public void run() {
        final List<File> fileList = getFilesFromDirectories();

        if (fileList.isEmpty()) {
            //Log Message
        } else {
            classB.sendEvent(fileList);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

测试类看起来像这样

    @RunWith(MockitoJUnitRunner.class)
    public class AppTest {

    @Rule
    public TemporaryFolder folder = new TemporaryFolder();

    @Mock
    private ClassB mockClassB;

    private File testFileOne;

    private File …
Run Code Online (Sandbox Code Playgroud)

java junit mocking mockito

19
推荐指数
2
解决办法
1万
查看次数

创建一个JsonProcessingException

我正在尝试创建一个由模拟对象抛出的JsonProcessingException.

when(mapper.writeValueAsString(any(Object.class))).thenThrow(new JsonProcessingException("Error"));
Run Code Online (Sandbox Code Playgroud)

但是我无法创建JsonProcessingException对象,因为所有构造函数都受到保护.我该如何解决这个问题?

java junit mockito jackson

19
推荐指数
4
解决办法
1万
查看次数

Mockito:doThrow()和thenThrow()之间的区别

doThrow()和之间有什么区别thenThrow()

假设我们想要模拟身份验证服务来验证用户的登录凭据.如果我们要模拟异常,以下两行之间的区别是什么?

doThrow(new BadCredentialsException("Wrong username/password!")).when(authenticationService).login("user1", "pass1");
Run Code Online (Sandbox Code Playgroud)

VS

when(authenticationService.login("user1", "pass1")).thenThrow(new BadCredentialsException("Wrong username/password!"));
Run Code Online (Sandbox Code Playgroud)

mockito

19
推荐指数
1
解决办法
2万
查看次数

即使在添加@PrepareForTest之后,Mockito也要求为该类添加@PrepareForTest

我有以下简单的代码.我有一个类(TestClass),我想测试"someMethod".有一个外部静态方法,由我的"someMethod"调用.我想Powermock那个静态方法给我一些虚拟对象.我在开头有@PrepareForTest(ExternalClass.class),但是当我执行它时会给出错误:

ExternalClass类没有准备好进行测试.要准备此类,请将类添加到'@PrepareForTest'注释中.如果您不使用此批注,请在类或方法级别添加批注.

请帮我指出我使用的方式有什么问题 @PrepareForTest

@RunWith(PowerMockRunner.class)
@PrepareForTest(ExternalClass.class)
public class xyzTest {  
    @Mock
    private RestTemplate restTemplate;

    @Mock
    private TestClass testClass;

    @BeforeClass
    private void setUpBeforeClass() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void testSuccessCase() {
        Boolean mockResponse = true;
        ResponseEntity<Boolean> response = new ResponseEntity<Boolean>(mockResponse, HttpStatus.OK);
        SomeClass someClass = new SomeClass("test", "1.0.0", "someUrl", "someMetaData");

        PowerMockito.mockStatic(ExternalClass.class);

        Mockito.when(restTemplate.postForEntity(any(String.class), any(String.class), eq(Boolean.class))).thenReturn(response);
        Mockito.when(ExternalClass.getSomeClass(any(String.class))).thenReturn(someClass);

        Boolean result = testClass.someMethod("test");

        Assert.isTrue(result);
        Mockito.verify(restTemplate, times(1)).postForObject(any(String.class), any(String.class), any());
    }
}
Run Code Online (Sandbox Code Playgroud)

java mockito powermock

19
推荐指数
6
解决办法
3万
查看次数

如何在Mockito中匹配可能的null参数

我正在尝试验证我正在测试的类调用正确的依赖类的方法.所以我试图匹配方法参数,但我并不真正关心这个测试中的实际值,因为我不想让我的测试变脆.

但是,我遇到了麻烦,因为Mockito决定我期待的行为是一个错误:https://github.com/mockito/mockito/issues/134

那么为可能为null的参数定义匹配器的正确方法是什么?

问题#134"已修复",此代码失败,因为匹配器仅在第一种情况下匹配.如何在所有4种情况下定义匹配器?

MyClass c = mock(MyClass.class);

c.foo("hello", "world");
c.foo("hello", null);
c.foo(null, "world");
c.foo(null, null);

verify(c, times(4)).foo(anyString(), anyString());
Run Code Online (Sandbox Code Playgroud)

mockito

19
推荐指数
1
解决办法
2万
查看次数

如何在没有powermock的情况下模拟静态方法

有没有什么办法可以在junit中测试时模拟静态util方法?

我知道Powermock可以模拟静态调用; 但我不想使用Powermock.

还有其他选择吗?

java junit unit-testing mockito powermock

19
推荐指数
3
解决办法
3万
查看次数