Resharper或nUnit测试计数用于反射测试

时间:2011-11-23 14:32:32

标签: unit-testing nunit resharper

我有很多基于反思的测试。对给定类型的给定程序集进行反射测试,例如,在service.dll中查找基于IService的所有内容。我已经这样做了,因为我需要将引用类型传递给我可以用TestCase归属做的测试。代码基本上如下所示:

    public static void TestRunnerforTypeList(Type baseType, Func<Type, string, bool> excluder, Action<Type, string> mockResolver, Dictionary<Type, Dictionary<Type, Mock>> mocks, Action<dynamic, Type> assertor, string methodName)
    {
        foreach (var type in GetTypesToTest(baseType))
        {
            if (excluder(type, methodName)) continue;
            dynamic objectToTest = CreateInstance(type, mocks);
            mockResolver(type, methodName);
            assertor(objectToTest, type);
        }
    }

对此的调用如下所示:

    [Test]
    public void Positive_outcome_for_Get()
    {
        GeneralTestRunner.TestRunnerforTypeList(typeof(IService<,,>),
                                            _serviceFactoryContext.ExcludeTypeForMethod,
                                            _serviceFactoryContext.ResolvePositiveMockSetup, 
                                            _mocks, 
                                            (service, type) => Assert.IsNotNull(service.Get(1)),
                                            "Get");
    }

这是一个简单的断言,但你明白了。通过这种方式,我获得了TestCase归属的好处,但是使用了引用类型,例如模拟,管道输入。

然而,我还有其他地方使用TestCase,而Resharper选择了这些,并增加了测试阶段的测试次数,有些人没有。

我的问题是有一种方法可以告诉Resharper(或nUnit)每次调用上述断言操作时该数字都会增加吗?

提前致谢;)

1 个答案:

答案 0 :(得分:0)

我发现这样做的唯一方法是使用Resharper 6并删除反射方面并使用TestCaseSource属性。 TestCaseSource将指向静态IEnumerable,为每个测试产生工厂引用类型。请参阅以下文档:

http://www.nunit.org/index.php?p=testCaseSource&r=2.5

与问题实现相比,唯一的问题是,如果程序员没有为实例创建者创建模拟,则反射测试将失败,但是仍然会拾取类型(如果它在同一个程序集中)。因此,如果一个懒惰的程序员创建一个基于IService的新类型(例如)没有测试,如果失败,则开箱即用。