我有一个工厂类,它根据收到的参数创建一个对象。该参数是一个标识符,告诉它应该创建哪个对象。 它的第一步是使用数据访问层来提取对象的信息。 它的下一步是对数据进行一些清理/转换。 最后,它创建了所需的对象并返回它。
我想确保清理/转换步骤正常,但它返回的对象不会暴露任何状态,因此我不确定如何轻松测试它。
数据访问层和数据库结构无法更改,因为它们必须使用遗留代码。
我可以在使用该对象后在系统中进一步测试它,但这会导致难以维护的大型测试。
我还想过暴露对象的状态,或者将责任放在另一个类中并对其进行测试,但这两个选项似乎都在改变系统以进行测试。
有关其他测试方法的想法吗?
答案 0 :(得分:2)
听起来我觉得你试图在单元测试中测试太多。
这是你的部队试图做太多的一个症状。
你正试图在这里做三件事。
为了解决这个问题,我会按照你的建议将这些责任转移到他们自己的单位(类/方法)中。然后你可以自己测试每个单元。
由于您不想更改系统进行测试,因此您犹豫不决。但是,单元测试的优势在于它突出了设计中的缺陷。您不仅要更改系统进行测试,还要对其进行改进,使其更加精细,从而更易于维护和重复使用。
答案 1 :(得分:1)
你的工厂对象试图在这里做太多。我建议重构您的代码,以便负责将数据清理到另一个对象,并测试该对象的行为。
我还想过暴露对象的状态,或者放置对象的状态 在另一个班级负责并测试,但这两个 选项似乎我正在改变系统进行测试。
这是对的,您正在更改系统以进行测试。这是一件好事。这是一个测试驱动设计的例子,它通过强迫您减少责任,使您的课程更轻松,从而推动更好的设计展现出更松散的耦合和更高的凝聚力。 (理想情况下,每个类只有just one responsibility。)这是TDD的主要优点之一,所以不要打它。
答案 2 :(得分:0)
我知道实现这个目标的两种方法: - 在Java中,通过使用反射。 - (以及最好的,IMO)编程专注于接口,因此您可以实现接口,从而可以访问数据。