我有一个抽象的Record类,它表示数据库中的记录。每条记录必须至少包含以下列:id,created,updated。
然后我扩展Record类来表示特定表中的行。例如,我有以下扩展记录的类:客户,工作,位置和公司。在每个中我定义了一个静态“table_name”变量和表示其列的静态变量。
我希望能够测试这些类的基本功能,Record的所有扩展都应该具有这些功能。我可以为每个人编写一个测试类来测试这些东西,但我基本上会复制并粘贴Record类的每个扩展的那些测试,这似乎不对。
我考虑过编写一个测试类,并在数组中使用带有这些对象的数据提供程序,但如果测试失败,我不知道哪个对象会导致失败。
必须有一种方法可以使用某种TestAllExtensionsOfRecordClass测试类,然后通过它运行我的对象,并能够告诉哪个对象导致了失败。
建议?
答案 0 :(得分:1)
许多单元测试框架支持测试类继承 - 您可以创建一个抽象测试超类,所有派生测试类将继承并执行其中的所有测试。这允许您在该超类中定义abstract test cases aka contract tests。这些是对“基本功能”的测试,无论具体实现如何,都必须保持不变。因此,在您的情况下,您将拥有一个包含所有基本测试用例和派生CustomerTest,JobTest等的抽象RecordTest,它们将根据自己的实现执行这些测试。