方法中的模拟自动连线字段



我想知道是否有一种方法可以模拟正在自动连接的字段。

考虑以下情况。

我有一个类名

public class A {
    @Autowired
    private B b;
    public void aMethod() {
         b.method();
    }
}

另一个B类看起来像这个

public class B {
    public void method() {
    // some code
    }
}

现在我想为该方法编写junit。

我知道有一种方法可以像这样模拟自动连接的字段。

public class TestA {
   @InjectMock
   private A a;
   @Mock
   private B b;

    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
    }
    public void testAMethod() {
        // write test case.
    }
}

但我的问题是->在用new创建对象后,有没有一种方法可以模拟方法内部的自动连接字段。

例如

public class TestA {

    public void testAMethod() {
       A a =new A();
       // how to mock the B instance in it.
    }
}

请提出建议,否则没有办法做到这一点????

我不想改变私人修饰语。我也不想添加getter和setter或反射。我只想知道在创建了a类的新对象之后,是否有一种方法可以模拟B实例。

ReflectionTestUtils怎么样?
A a = new A();
B b = mock(B.class);
ReflectionTestUtils.setField(a, "b", b);

它仍然是基于反思的,并且有所有相关的缺点,尽管它非常简单易读。

使用mockito不能做到这一点,这需要修改正在测试的类的字节码。但是Powermock允许这样的存根。请注意,我和Powermock的创建者Johan Haleby会推动重构,而不是使用Powermock。Powermock非常强大,可能太强大了,工作允许任何人编写难以维护或扩展的遗留代码(您可以在设计糟糕的遗留代码中找到属性)。

在您的情况下,我不知道您的依赖项注入出了什么问题。但是,如果代码需要B的新实例,那么在A中注入一个工厂/提供者/构建器类可能会很有用,该类将生成B的新实例。使用Mockito可以很容易地清除此类代码。

相关内容

  • 没有找到相关文章

最新更新