0

我正在测试一个类,比如用 JUnit 说 MyClass。我正在使用 easymock 来隔离对 db 的需求。它工作正常。因此,如果有对模型对象的调用,我只是模拟该对象。例如,如果我有

public void method(Project project) { project.getName(); ..}

在 MyClass 中,我只使用 mockedProject。然后我说 MyClass.method(mockedProject); 但是如果我在 MyClass 中有 this.getName() 怎么办。在这种情况下,由于我想要我正在测试的类(MyClass)的真实对象,我无法模拟 MyClass 对象。所以我不能为 MyClass 对象定义返回值,因为它是一个真实的对象。请记住 getName() 会抛出我不希望它离开的数据库。

当我有 this.method() 并且该方法与 db 一起使用时,在这种情况下我应该怎么做。我无法模拟我正在测试的这个对象。谢谢。

4

2 回答 2

1

如果您能够模拟用于访问数据库的类,那么就这样做,然后this.getName()将使用模拟的类并获得您定义的任何数据。

如果不能模拟 DB 访问类,那么您将无能为力。

更新:

测试 JPA 实体可能会有点棘手,如果你可以模拟实际的实体,那么无论如何,去做它并让它返回你喜欢的任何东西而不是 DB 结果。但我不确定这是否可能。

我建议您在这里这里查看更详细的示例。

于 2012-07-16T09:20:36.647 回答
0

您应该模拟在 MyClass.getName() 中访问数据库的类(例如 EntityManager)并记录这些模拟所需的行为

于 2012-07-16T06:45:50.733 回答