【问题标题】:Use the same TestClass with different base class使用具有不同基类的相同 TestClass
【发布时间】:2014-02-11 15:59:49
【问题描述】:

我正在测试各种服务器,它们具有相同的模型,已经通过单元测试。 现在我想测试真实的服务器(不仅是通用模型)。

在测试通用模型时,我使用假适配器创建了假通用服务器,它在基本测试类中定义,所有测试类都继承自它。这进行了一百多个测试。

现在我需要使用相同的测试类,但需要使用不同的基类(用于各种真实服务器)。他们使用相同的测试数据并具有相同的结果。它们在某些内部方法上有所不同。

是否有可能调用所有测试的次数与服务器数量一样多,每次使用不同的基础测试类(服务器类型和构造函数)?

示例:

[TestClass]
public class GeneralServerTests : BaseServer
{
    [TestMethod]
    public void IsAlive_ChecksInteraction_ReturnsTrue()
    {
        Assert.IsTrue(GeneralServer.Adapter.IsAlive());
    }
    ...
}

基础测试类

[TestClass]
public abstract class BaseServer
{
    protected Server GeneralServer;

    [TestInitialize]
    public void Setup()
    {
        //here I assign the Server constructor,
    }
}

所以我需要用不同的服务器调用 GeneralServerTests 类。

希望你明白我的意思:)

有什么办法吗?

【问题讨论】:

  • 我明白你的意思,但通常单元测试不应该以任何方式涉及服务器(当然,除了构建服务器)。您应该测试代码路径,而不是服务器。如果你不能,就需要重新设计一些东西。如果您的逻辑依赖于服务器,那么您可能需要进行一些重构以使您的服务器类更通用,只有连接字符串有所不同。某些东西难以测试或测试混乱的迹象并不意味着您测试得不够好,它意味着被测代码编写得不够好。这并不总是正确的,但这是一个公平的假设。

标签: c# unit-testing base-class test-class


【解决方案1】:

如果您使用“是”概念来解释继承,阅读这句话:“GeneralServerTests IS a BaseServer”,那么这似乎没有多大意义。所以我认为你的测试继承模型可能需要一些审查和重构。

现在,关于针对不同输入运行相同的测试,您应该进行数据驱动测试:

http://msdn.microsoft.com/en-us/library/ms182527.aspx

您可以使用数据源指定有关目标服务器的信息,并配置您的测试代码。

【讨论】:

    【解决方案2】:

    好的,我解决了这个问题

    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV",|DataDirectory|\ArchiveTestingData.csv", "ArchiveTestingData#csv", DataAccessMethod.Sequential)]

    所有需要的适配器信息都写在这里。

    现在所有测试的运行次数与文件中适配器的数量一样多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      相关资源
      最近更新 更多