Java 如何将thenReturn()与注入的@Mock类一起使用?

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

在Mockito测试用例中,BClass被注入到AClass中。我想为b.doSomething()定义一个返回值,该值将在a.askBSomething()中调用

但是,我的AClass没有构造函数,因此我无法在单元测试中将b传递给a。有解决办法吗

@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)
}