单元测试:测试具有外部方法的类

class A {

    int a;


    public int add() {

        B b = new B();

        a = b.calculate(4, 5);

        return a;

    }

}


class B {

    public int calculate(int x, int y) {

        return x * y;

    }

}

我想测试 A 类,这里不想测试 add() 方法中的 b.calculate()。所以我需要模拟B类。


这是我的代码。


@Mock

B bclass;


A aclass;


@Before

public void setUp() {

    bclass = new B();

    aclass = new A();

}


@Test

public void testAClass() {

    when(bclass.calculate(4, 5)).thenReturn(45);

    assertEquals(45, aclass.add());

}

测试失败。它出什么问题了?


动漫人物
浏览 196回答 3
3回答

梦里花落0921

看起来您正在使用 Mockit 框架。您可以尝试执行以下操作:new MockUp<B>() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Mock&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int calculate(int x, int y) // no access modifier required&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return 45; // your value&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; };

千巷猫影

您的问题是class对 class的隐藏依赖。AB@Jens 的回答向您展示了如何使用PowerMock解决这个问题,但我认为这是对您糟糕设计的投降。更好的是通过将类的实例注入到类的对象中,最好是作为构造函数参数来使这种依赖显式化。最好使用依赖注入框架,如或。 您可以使用调节 Mockito 结构。BAguicespringclass A {&nbsp; &nbsp; int a;&nbsp; &nbsp; private final B b;&nbsp; &nbsp; public A(B b){&nbsp; &nbsp; &nbsp; this.b=b;&nbsp; &nbsp; }&nbsp; &nbsp; public int add() {&nbsp; &nbsp; &nbsp; &nbsp; a = b.calculate(4, 5);&nbsp; &nbsp; &nbsp; &nbsp; return a;&nbsp; &nbsp; }}@MockB bclass;A aclass;@Beforepublic void setUp() {&nbsp; &nbsp; aclass = new A(bclass);}@Testpublic void testAClass() {&nbsp; &nbsp; when(bclass.calculate(4, 5)).thenReturn(45);&nbsp; &nbsp; assertEquals(45, aclass.add());}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java