当前位置: 首页 > 知识库问答 >
问题:

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

黄修永
2023-03-14

我想知道是否有办法模拟正在自动连线的场。

考虑下面的情况。

我有一个班级名A

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.
    }

}

但我的问题是-

eg

public class TestA {


    public void testAMethod() {
       A a =new A();

       // how to mock the B instance in it.

    }

}

请提出建议,否则就没有办法了????

我不想改变私人生活。我也不想添加getter和setter或reflection。我只是想知道,在创建一个类的新对象之后,有没有办法模拟B实例。

共有2个答案

彭鸿文
2023-03-14

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

但是,如果代码需要一个新的B实例,那么在A中注入一个工厂/提供者/构建者类可能是有用的,它将创建一个新的B实例。这样的代码可以很容易地与Mockito存根。

柴良哲
2023-03-14

反射测试呢?

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

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

 类似资料:
  • 我有一个类。并且我已经编写了一个类的单元测试方法的类。我的代码如下:- 在我的单元测试课上,我编写了以下方法。 当我执行测试类,我得到错误。这是因为在类中,在方法的第8行中,学生机构映射字段为null。这只发生在模拟对象上。如何获得模拟对象的自动生成字段?

  • 当我运行这个测试时,我会得到以下输出(如果我的服务不需要另一个bean,我会得到预期的输出) 由于这个响应,我在line.andExpect(content().contentType(Mediatype.application_json_utf8));上遇到了问题。当我检查response body时(因为body也是空的) 再现问题的示例项目在这里

  • 问题内容: 我想在Python的xlsxwriter中模拟Excel自动拟合功能。根据此网址,不直接支持它:http : //xlsxwriter.readthedocs.io/worksheet.html 但是,在工作表中的每个单元格之间循环并确定列的最大大小,然后使用worksheet.set_column(row,col,width)设置宽度应该非常简单。 使我无法撰写本文的复杂因素包括:

  • 我读了很多关于如何模拟Spring的bean和它们的自动连线场的文章。但我找不到任何关于豆子的autowired列表。 具体问题 我想测试一下这门课。但我找不到模拟属性的方法。 我所尝试的 由于是单例,我尝试模拟这些bean的几个实例,希望它们能够反映在中,但没有成功。 然后,我尝试创建一个列表,该列表被注释为。通过手动启动,我希望注入创建的列表。这仍然没有成功。 在中抛出了一个NPE,我认为这会

  • 我为用户和管理员提供了两个rolle服务,具有这些接口: 这是AdminServiceImpl: 这是ApplicationContext.xml

  • 下面是我在测试中尝试做的事情。 TestConfig: 测试:: mockito:通过反射调用参数的mock方法 mockito:是否可以将mock与方法名结合在一起,在when()调用中创建methodCall? 利用Mockito通过反射模拟方法