<small id='BZg6B'></small><noframes id='BZg6B'>

    1. <tfoot id='BZg6B'></tfoot>

        <legend id='BZg6B'><style id='BZg6B'><dir id='BZg6B'><q id='BZg6B'></q></dir></style></legend>

      1. <i id='BZg6B'><tr id='BZg6B'><dt id='BZg6B'><q id='BZg6B'><span id='BZg6B'><b id='BZg6B'><form id='BZg6B'><ins id='BZg6B'></ins><ul id='BZg6B'></ul><sub id='BZg6B'></sub></form><legend id='BZg6B'></legend><bdo id='BZg6B'><pre id='BZg6B'><center id='BZg6B'></center></pre></bdo></b><th id='BZg6B'></th></span></q></dt></tr></i><div id='BZg6B'><tfoot id='BZg6B'></tfoot><dl id='BZg6B'><fieldset id='BZg6B'></fieldset></dl></div>

          <bdo id='BZg6B'></bdo><ul id='BZg6B'></ul>

        如何模拟从 Junit 调用内部方法

        时间:2023-09-25
        <tfoot id='2TFRn'></tfoot>
          <tbody id='2TFRn'></tbody>
        • <small id='2TFRn'></small><noframes id='2TFRn'>

              1. <i id='2TFRn'><tr id='2TFRn'><dt id='2TFRn'><q id='2TFRn'><span id='2TFRn'><b id='2TFRn'><form id='2TFRn'><ins id='2TFRn'></ins><ul id='2TFRn'></ul><sub id='2TFRn'></sub></form><legend id='2TFRn'></legend><bdo id='2TFRn'><pre id='2TFRn'><center id='2TFRn'></center></pre></bdo></b><th id='2TFRn'></th></span></q></dt></tr></i><div id='2TFRn'><tfoot id='2TFRn'></tfoot><dl id='2TFRn'><fieldset id='2TFRn'></fieldset></dl></div>

                  <bdo id='2TFRn'></bdo><ul id='2TFRn'></ul>
                  <legend id='2TFRn'><style id='2TFRn'><dir id='2TFRn'><q id='2TFRn'></q></dir></style></legend>
                  本文介绍了如何模拟从 Junit 调用内部方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我有 MyClass,我正在为每个方法做一个测试类 (Method1Test)

                  I have MyClass and I am doing a test-class for every method (Method1Test)

                  public class MyClass {
                      public int method1(){
                          int a = method2();
                          return a;
                      }
                      public int method2(){
                          return 0;
                      }
                  }
                  
                  @RunWith(MockitoJUnitRunner.class)
                  public class Method1Test {
                      @InjectMocks
                      private MyClass myClass = new MyClass();
                      @Before
                      public void setup(){}
                      @Test
                      public void test01(){
                          Mockito.when(myClass.method2()).thenReturn(25);
                          int a = myClass.method1();
                          assertTrue("We did it!!!",a==25);
                      }
                  }
                  

                  问题是我无法模拟对 method2 的调用以使其返回不同的值.Mockito 语句不起作用.

                  The problem is that I am not able to mock the call to method2 to make it return a diferent value. The Mockito sentence don't do the work.

                  非常感谢^_^

                  推荐答案

                  你必须在被测类上创建一个 spy 并通过重新定义 method2() 的行为来部分模拟它间谍

                  You have to create a spy on the class-under-test and partially mock it by redefining the behavior for the method2() of the spy

                  import static org.junit.Assert.assertEquals;
                  import static org.mockito.Mockito.spy;
                  import static org.mockito.Mockito.when;
                  
                  
                  public class Method1Test {
                  
                    private MyClass myClass = new MyClass();
                  
                    @Test
                    public void test01(){
                      //given
                      MyClass spy = spy(myClass); //create a spy for class-under-test
                      when(spy.method2()).thenReturn(25); //partially override behavior of the spy
                      //when
                      int a = spy.method1(); //make the call to method1 of the _spy_!
                      //then
                      assertEquals(25, a);
                    }
                  }
                  

                  除此之外,您既不需要 Mockito Runner 也不需要 @InjectMocks 进行测试,因为您没有将 @Mock 带注释的模拟注入到被测类.

                  Apart from this, you don't require neither the Mockito Runner nor the @InjectMocks for your test as you're doing no injection of @Mock annotated mocks into the class-under-test.

                  此外,assertTrue 语句中的消息仅在断言的条件 NOT 满足时才会显示.所以应该是至少我们失败了!!!";)

                  Further, the message in the assertTrue statement is only displayed, when the condition of the assertion is NOT fulfilled. So it should be at least "We failed!!!" ;)

                  这篇关于如何模拟从 Junit 调用内部方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:如何模拟 JdbcTemplate.queryForObject() 方法 下一篇:SecurityManager 的 Mockito 模拟抛出异常

                  相关文章

                  最新文章

                • <tfoot id='cdKlw'></tfoot><legend id='cdKlw'><style id='cdKlw'><dir id='cdKlw'><q id='cdKlw'></q></dir></style></legend>
                  • <bdo id='cdKlw'></bdo><ul id='cdKlw'></ul>

                    <small id='cdKlw'></small><noframes id='cdKlw'>

                      <i id='cdKlw'><tr id='cdKlw'><dt id='cdKlw'><q id='cdKlw'><span id='cdKlw'><b id='cdKlw'><form id='cdKlw'><ins id='cdKlw'></ins><ul id='cdKlw'></ul><sub id='cdKlw'></sub></form><legend id='cdKlw'></legend><bdo id='cdKlw'><pre id='cdKlw'><center id='cdKlw'></center></pre></bdo></b><th id='cdKlw'></th></span></q></dt></tr></i><div id='cdKlw'><tfoot id='cdKlw'></tfoot><dl id='cdKlw'><fieldset id='cdKlw'></fieldset></dl></div>