【问题标题】:Is it possible to create a dynamic unit test?是否可以创建动态单元测试?
【发布时间】:2015-05-04 06:38:36
【问题描述】:

我目前正在运行一些测试,以确保对于每个实现特定接口的类,我得到了一些尊重。

这目前在一个 winform 应用程序中运行,它允许我为每个类给出一个结果,如果它们是好的或有什么问题。

我想将其转换为 TestClass/TestMethod,但我目前不知道如何。

问题是我需要为每个班级获得一个结果(或者至少每个班级都有一个错误,这是不工作的。

目前我有这段代码:

foreach (Type type in GetTypesToCheck())
{
    m_logger.Debug("Checking type " + type.FullName);
    FieldInfo staticField;
    dynamic definition;
    if (CheckStaticField(type, out staticField) && CheckDefinitionPresent(type) && CheckParentDefinition(type, staticField, out definition) && CheckRegistration(type, definition) &&
        CheckSubTypes(type, definition))
    {
        m_logger.Information(type.FullName + ": OK");
    }
}

有没有办法使用 UnitTests 进行这种检查,并且每个类有一个结果(或每个类有多个结果)?

【问题讨论】:

  • 我假设您使用 MSTest 作为测试框架?
  • 是的,抱歉,我没想到要提这个
  • 所以你基本上是想把多个测试用例浓缩成一个测试用例?在 MSTest 中,测试可以是成功也可以是失败,所以如果你有一次失败,那么一切都会失败。这似乎适得其反。

标签: c# .net unit-testing dynamic reflection


【解决方案1】:

您可以将失败的类型存储在临时集合中,然后对该集合执行所需的断言。

下面是一个例子:

[TestClass]
public class UnitTest1
{

    [TestMethod]
    public void TestMethod1()
    {
        var failedTypes = new List<Type>(); //to keep failed types

        foreach (Type type in GetTypesToCheck())
        {
            FieldInfo staticField;
            dynamic definition;
            if (!CheckStaticField(type, out staticField) 
                    || !CheckDefinitionPresent(type) 
                    || !CheckParentDefinition(type, staticField, out definition)
                    || !CheckRegistration(type, definition) 
                    || !CheckSubTypes(type, definition))
                failedTypes.Add(type);
        }

        Assert.IsTrue(
            failedTypes.Count == 0, 
            "Failed types: " + string.Join(", ", failedTypes)
            );
    }
}

【讨论】:

    猜你喜欢
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多