是否可以创建动态单元测试?

时间:2015-03-03 14:46:31

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

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

目前正在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进行这种检查并且每个类有一个结果(或每个类有多个结果)?

1 个答案:

答案 0 :(得分:0)

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

以下是一个例子:

[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)
            );
    }
}