Java 如何将thenReturn()与注入的@Mock类一起使用?
在Mockito测试用例中,BClass被注入到AClass中。我想为b.doSomething()定义一个返回值,该值将在a.askBSomething()中调用 但是,我的AClass没有构造函数,因此我无法在单元测试中将b传递给a。有解决办法吗Java 如何将thenReturn()与注入的@Mock类一起使用?,java,junit,dependency-injection,mockito,Java,Junit,Dependency Injection,Mockito,在Mockito测试用例中,BClass被注入到AClass中。我想为b.doSomething()定义一个返回值,该值将在a.askBSomething()中调用 但是,我的AClass没有构造函数,因此我无法在单元测试中将b传递给a。有解决办法吗 @RunWith(MockitoJUnitRunner.class) public class AClassTest { @Mock BClass b; @InjectMocks AClass a = new AC
@RunWith(MockitoJUnitRunner.class)
public class AClassTest {
@Mock
BClass b;
@InjectMocks
AClass a = new AClass();
@Before
public void setUp() throws Exception {
when(b.doSomething()).thenReturn("something");
}
@Test
public void test() {
assertTrue(a.askBSomething());
}
}
public class AClass {
@Inject
private BClass b;
public boolean askBSomething() {
String result = b.doSomething(); // result will be null instead of "something"
//.....
}
}
提前谢谢。是的,有。调用AClass的c'tor后,可以使用反射在AClass中设置模拟 只需添加以下方法,并在设置中调用它()
或者,您可以为b添加一个公共setter,并在setUp()中调用它。askBSomething return void。。你怎么能在上面使用assertTrue?我的错,我写这个只是为了演示。我已编辑。当您调试时。。b是否在askBSomething中,与setUp()中的实例相同?我可以在AClass中看到@injectb类b。您使用什么框架进行依赖项注入问题是ASKBB中的b。有些东西不是同一个实例,我已经更改了它,我的代码工作正常,谢谢
private void setMockB(AClass objectA, BClass mockB)
{
Field bField = AClass.class.getDeclaredField("b");
bField.setAccessible(true);
bField.set(objectA, mockB)
}