首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟的单元测试和工厂

模拟的单元测试和工厂
EN

Stack Overflow用户
提问于 2019-11-16 04:50:11
回答 1查看 83关注 0票数 0

假设我有一个需要测试的C类。它的部分工作是创建许多其他重要的类对象(每个对象都有自己的业务逻辑),并在这些新对象上调用各种方法。我希望能够在不测试C创建的其他对象的实现的情况下测试C类。创建一个工厂来创建这些非平凡的对象,然后将一个模拟的工厂实例传递到测试中,这是唯一真正的解决方案吗?我不希望有一个工厂来创建其他非平凡的对象,但另一方面,我也不想为每个非平凡的类都有一个工厂。

还有其他建议吗?

编辑:根据请求添加了一些伪代码

代码语言:javascript
复制
public B doIt()
{
  List<A> as = getListOfAsFromDatabase();
  AParser AParser = new AParser();
  boolean foo = aParser.parse(as); // may modify the list of A's
  B b = new B();
  return b.add(foo, as);
}
EN

回答 1

Stack Overflow用户

发布于 2019-11-16 06:01:09

如果依赖对象是在成员级别创建的,我们可以使用Mockito和PowerMock来创建模拟并更新成员以模拟依赖。为了简单起见,我使用了静态内部类,这个解决方案同样适用于常规类。

代码语言:javascript
复制
public class Test1 {
    @Test
    public void test() {
        B mockedb = org.mockito.Mockito.mock(B.class);
        A a = new A();
        org.powermock.reflect.Whitebox.setInternalState(a, "b", mockedb);
        a.exe();
    }

    public static class A {
        private B b = new B();

        public void exe() {
            List<String> l = new ArrayList<>();
            l.add("a");
            b.exeB(l);
            System.out.println(l);
        }

        public static class B {
            public void exeB(List<String> s) {
                s.add("b");
            }
        }

    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58884484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档