代码之家  ›  专栏  ›  技术社区  ›  ryeguy

我应该在哪里测试抽象类上的方法?

  •  1
  • ryeguy  · 技术社区  · 14 年前

    我有一个抽象类,它定义了一些方法。这个类有两个子类。

    我应该仅仅为了测试而创建一个伪子类,还是应该通过子类的测试来测试方法?通过子类进行测试似乎更自然,但之后我必须在两个子类的测试之间复制测试代码。

    你们觉得呢?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Mark Byers    14 年前

    您不必复制测试代码—您可以编写测试方法,以便它们接受参数。

    由于大多数测试框架不支持接受参数的测试,因此可以添加一个小包装器,用特定实例调用参数化测试方法。现在,您可以很容易地选择是只对某个特定基类调用一次测试,还是对同一方法进行多个测试—对每个可能的基类进行一个测试。因为每个新测试只需要添加一个瘦包装,所以几乎没有代码重复。

    void TestSomething(AbstractClass foo)
    {
        // Your test code goes here.
        Assert.AreEqual(42, foo.Bar());
    }
    
    [Test]
    void TestSomethingFoo1()
    {
        TestSomething(new Foo1());
    }
    
    [Test]
    void TestSomethingFoo2()
    {
        TestSomething(new Foo2());
    }
    
        2
  •  1
  •   djna    14 年前

    我会选择一个最小的伪子类,将其与抽象类相关联。我喜欢认为不管具体的实例化发生了什么,抽象类都得到了正确的测试。这确实假设抽象类中的代码是非常重要的,并且编写假类并不是不恰当的工作——我认为通常情况下是这样的。