单元测试中自动装配字段的模拟为空

时间:2014-03-25 20:15:04

标签: java spring junit

有没有人知道为什么在这个例子中,当运行“ATest”时,我得到一行“return b.getBAutoWiredObject()。getString();”

对此有任何见解将不胜感激。

@RunWith(MockitoJUnitRunner.class)
public class ATest {
    @Mock
    private A a;

    @Test
    public void testMethod() {
        String testedString = a.method();

        assertEquals("blah", testedString);
    }   
}

@Service("A")
public class A {
    public String method() {
        B b = new B();

        return b.getBAutoWiredObject().getString();
    }
}

@Component
public class B {
    @Autowired
    @Qualifier("Bautowire")
    private BAutoWiredObject bAutoWiredObject;

    public BAutoWiredObject getBAutoWiredObject() {
        return bAutoWiredObject;
    }
}

@Service("Bautowire")
public class BAutoWiredObject {
    private String string = new String("blah");

    public void getString() {
        return string;
    }
}

1 个答案:

答案 0 :(得分:0)

通常,答案是null因为您自己创建了B实例。 Spring并没有参与,所以它没有自动装配任何东西。

在这种情况下,您的A对象是@Mock,并且通常实现模拟以在任何具有返回类型的方法中返回null参考类型。 您的method()实施实际上并没有被调用。模拟的实现是。

这是假设您的测试实际编译并且使用@Test带注释的方法有效。


assertEquals(testedString, "blah");

应该是

assertEquals("blah", testedString);

第一个参数应该是预期值,第二个参数应该是实际值。