0

例如,假设我有一个像这样的基本 POJO。

public class Stuff {

   private OtherStuff otherStuff;

   ...

   public void RunOtherStuff() {
       otherStuff.run();
   }

}

您将如何测试 RunOtherStuff 调用 otherStuff.run?

我现在使用 TestNG 作为我的基础测试框架,并且对任何允许我进行测试的 Java 框架完全开放,类似于在 Rails 和 Ruby 中使用 rspec 等。

4

2 回答 2

0

你会创建一个 setterotherStuff并且在你打电话之前RunOtherStuff()你会打电话setOtherStuff(myFake)

public class Stuff {

   private OtherStuff otherStuff;

   public void setOtherStuff(OtherStuff otherStuff) {
       this.otherStuff = otherStuff;
   }

   ...

   public void RunOtherStuff() {
       otherStuff.run();
   }

}

那么你的测试可以这样写:

private Stuff stuff;
private boolean runWasCalled;

public void setUp() {
    stuff = new Stuff();
    stuff.setOtherStuff(new OtherStuff() {
        public void run() {
            runWasCalled = true;
        }
    });
}



public void testThatOtherStuffRunMethodIsCalled() {
    stuff.RunOtherStuff();

    assertTrue(runWasCalled);
}
于 2013-01-09T20:47:34.453 回答
0

编写一个MockOtherStuff基本上是 OtherStuff 的子类。覆盖run()方法并说喜欢System.out.println('Run is called');

OtherStuff现在,在课堂上有一个二传手Stuff并通过你的嘲笑者。

编辑:

要断言,您可能有一个布尔变量 runWasCalled(默认为 false)并将其设置为 trueMocOtherStuff.run()

于 2013-01-09T20:56:12.170 回答