java接收参数的构造函数_java – 使用参数模拟构造函数

我有一个课程如下:

public class A {

public A(String test) {

bla bla bla

}

public String check() {

bla bla bla

}

}

构造函数A(String test)和check()中的逻辑是我试图模拟的东西.我想要任何调用:new A($$$任何字符串$$$).check()返回一个虚拟字符串“test”.

我试过了:

A a = mock(A.class);

when(a.check()).thenReturn("test");

String test = a.check(); // to this point, everything works. test shows as "tests"

whenNew(A.class).withArguments(Matchers.anyString()).thenReturn(rk);

// also tried:

//whenNew(A.class).withParameterTypes(String.class).withArguments(Matchers.anyString()).thenReturn(rk);

new A("random string").check(); // this doesn't work

但它似乎没有奏效.新的A($$$任何字符串$$$).check()仍然通过构造函数逻辑而不是获取A的模拟对象.

解决方法:

您发布的代码适用于最新版本的Mockito和Powermockito.也许你还没准备好A?

尝试这个:

A.java

public class A {

private final String test;

public A(String test) {

this.test = test;

}

public String check() {

return "checked " + this.test;

}

}

MockA.java

import static org.hamcrest.MatcherAssert.assertThat;

import static org.hamcrest.Matchers.equalTo;

import static org.mockito.Mockito.mock;

import static org.mockito.Mockito.when;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.mockito.Mockito;

import org.powermock.api.mockito.PowerMockito;

import org.powermock.core.classloader.annotations.PrepareForTest;

import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)

@PrepareForTest(A.class)

public class MockA {

@Test

public void test_not_mocked() throws Throwable {

assertThat(new A("random string").check(), equalTo("checked random string"));

}

@Test

public void test_mocked() throws Throwable {

A a = mock(A.class);

when(a.check()).thenReturn("test");

PowerMockito.whenNew(A.class).withArguments(Mockito.anyString()).thenReturn(a);

assertThat(new A("random string").check(), equalTo("test"));

}

}

两个测试都应该通过mockito 1.9.0,powermockito 1.4.12和junit 4.8.2

标签:java,mocking,junit,mockito,powermock

来源: https://codeday.me/bug/20190923/1814916.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值