相关疑难解决方法(0)

最终方法嘲笑

我需要使用mockito使用final方法模拟一些类.我写过这样的东西

@Test
public void test() {
    B b = mock(B.class);
    doReturn("bar called").when(b).bar();   
    assertEquals("must be \"overrided\"", "bar called", b.bar());
    //bla-bla
}


class B {
    public final String bar() {
        return "fail";
    }
}
Run Code Online (Sandbox Code Playgroud)

但它失败了.我尝试了一些"黑客",它的确有效.

   @Test
   public void hackTest() {
        class NewB extends B {
            public String barForTest() {
                return bar();
            }
        }
        NewB b = mock(NewB.class);
        doReturn("bar called").when(b).barForTest();
        assertEquals("must be \"overrided\"", "bar called", b.barForTest());
    }
Run Code Online (Sandbox Code Playgroud)

它有效,但"闻起来".

那么,正确的方式在哪里?

谢谢.

java testing unit-testing mocking mockito

60
推荐指数
5
解决办法
6万
查看次数

如何模拟正在测试的同一个类中的另一个方法?

我正在为一个有两个方法methodA,methodB的类编写JUnit Test案例.我想在我的测试用例中模拟从methodA调用methodB我在我正在测试的类上使用spy,但仍然执行了methodB.

这是班级

 public class SomeClass
{

     public Object methodA(Object object) 
    {
         object=methodB(object);

        return object;
    }



    public Object methodB(Object object) 
    {
        //do somthing
        return object;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是测试类

  @RunWith( org.powermock.modules.junit4.legacy.PowerMockRunner.class )
    @PrepareForTest(SomeClass.class)
    public class SomeClassTest { 

        private SomeClass var = null; 


        @Before
        public void setUp() {

            var=new SomeClass();

        }

        @After
        public void tearDown()
            {
            var= null;

        }

        @Test
        public void testMethodA_1()
            throws Exception {
            Object object =new Object();
        SomeClass spy_var=PowerMockito.spy(var);
        PowerMockito.when(spy_var.methodB(object)).thenReturn(object);

    Object result = var.methodA(object);        

        assertNotNull(result);

        }

    }
Run Code Online (Sandbox Code Playgroud)

虽然我已经模拟了它,但方法B仍然可以调用它.但是PLease建议我使用适当的方法来模拟同一类的methodA中的methodB调用.

java junit unit-testing mockito

7
推荐指数
3
解决办法
2万
查看次数

使用 Mockito 间谍模拟类中的方法

引用同一个类中的模拟方法

class Temp() {

public boolean methodA(String param) {

     try {

         if(methodB(param))
               return true;

         return false;
     } catch (Exception e) {
           e.printStackTrace();
     }
}
}
Run Code Online (Sandbox Code Playgroud)

测试类

@Test
public void testMethodA() {

Temp temp = new Temp();
Temp spyTemp = Mockito.spy(temp);

Mockito.doReturn(true).when(spyTemp).methodB(Mockito.any()); 
boolean status = temp.methodA("XYZ");

Assert.assertEquals(true, status);
}
Run Code Online (Sandbox Code Playgroud)

当调用真实类 temp 到 methodA 时,应该返回模拟的方法 B 值。因此返回true。为什么这是不正确的。我遇到了同样的问题。我想在真正的班级上运行测试,而不是按照答案的建议运行模拟对象。我想运行类 methodA 并在调用时期望模拟对象 spyTemp methodB 值

java junit mockito

0
推荐指数
1
解决办法
6970
查看次数

标签 统计

java ×3

mockito ×3

junit ×2

unit-testing ×2

mocking ×1

testing ×1