0

我有一个工厂类,它根据接收到的参数创建一个对象。参数是一个标识符,告诉它应该创建哪个对象。它的第一步是使用数据访问层为对象提取信息。下一步是对数据进行一些清理/转换。最后,它创建所需的对象并返回它。

我想确保清理/转换步骤顺利,但它返回的对象没有暴露任何状态,所以我不确定如何轻松测试它。

数据访问层和数据库结构不能改变,因为它们必须使用遗留代码。

在对象被使用后,我可以在系统中进一步测试它,但这会导致难以维护的大型测试。

我还考虑过公开对象的状态,或者将责任放在另一个类中并对其进行测试,但这两个选项似乎都在更改测试系统。

关于其他方法来测试这样的东西有什么想法吗?

4

3 回答 3

2

在我看来,您试图在单元测试中进行太多测试。

这是您的单位试图做太多事情的症状。

您在这里尝试做三件事。

  1. 从数据访问层获取数据。
  2. 清理数据。
  3. 构建对象

为了解决这个问题,我会按照您的建议将这些责任中的每一个转移到它们自己的单元(类/方法)中。然后,您可以单独测试每个单元。

您不愿意这样做,因为您不想更改系统进行测试。然而,单元测试的优势在于它突出了设计中的缺陷。您不仅要更改系统以进行测试,还要改进它并使其更细化,从而更易于维护和重用。

于 2011-08-23T14:42:35.323 回答
1

您的工厂对象在这里尝试做太多事情。我建议重构您的代码,让其负责将数据清理到另一个对象,并测试该对象的行为。

我还考虑过公开对象的状态,或者将责任放在另一个类中并对其进行测试,但这两个选项似乎都在更改测试系统。

没错,您正在更改测试系统。这是一件好事。这是测试驱动设计的一个例子,它通过迫使你走上给你的类更少的责任的道路,推动了一个表现出更松散耦合和更高内聚的更好的设计。(理想情况下,每个班级只有一个职责。)这是 TDD 的主要好处之一,所以不要抗拒它。

于 2011-08-23T14:43:02.857 回答
0

我知道实现这一点的两种方法: - 在 Java 中,通过使用反射。-(最好的,IMO)编程专注于接口,因此您可以实现可以访问数据的接口。

于 2013-01-27T20:03:09.977 回答