【发布时间】:2010-12-09 08:11:05
【问题描述】:
我读的模拟示例越多,我就越困惑......
我有调用 FatDude 类eatThemAll() 的classA 方法eat()
public class classA {
FatDude dude = new FatDude();
public String eat() {
String result = dude.eatThemAll();
}
}
public class FatDude {
public String eatThemAll() {
return "never full";
}
}
现在我想通过模拟 FatDude 类来测试 classA eat() 方法。
public class MockFatDude extends FatDude {
//override
public String eatThemAll() {
return "very full";
}
}
------------- test --------------
public class DoTest {
public void runTest() {
classA cl = new ClassA();
String out = cl.eat();
assertEqual(out, "very full");
}
}
这个 DoTest runTest() 当然不会使用 MockFatDude 类。我能想到的一种方法是更改代码以将 FatDude 传递给 ClassA 的 eat() 方法,例如:
public class classA {
public String eat(FatDude dude) {
String result = dude.eatThemAll();
}
}
然后把我的测试方法改成:
public class DoTest {
public void runTest() {
classA cl = new ClassA();
String out = cl.eat(new MockFatDude());
assertEqual(out, "very full");
}
}
但正如您所见,我不得不更改源代码以满足我的需要。 这是正确的做法吗?如果我不允许更改我的源代码怎么办? 我知道如果我应用 TDD 概念,可以更改源代码,但我想听听 如果我上面显示的方法是正确的,请提出一些意见或建议。
【问题讨论】:
-
是java还是C#?你用什么工具?请添加适当的标签。谢谢。
-
@maksymko:我不认为语言或工具对这个问题很重要,除了它是一种面向对象的语言。
-
@calavera:我的意思是为了澄清更正确的分类/过滤等,而不是帮助回答问题。
-
@maksymko:我没有使用 jmock 或 easymock 之类的任何工具,因为我想了解什么是 mock 以及如何使用。大部分教程都展示了使用难以理解的模拟工具的示例。
标签: java unit-testing mocking