Resharper или nUnit счетчик тестов для рефлексивных тестов - PullRequest
0 голосов
/ 23 ноября 2011

У меня есть ряд тестов, основанных на рефлексии. Рефлексивный тест работает на заданной сборке для данного типа, то есть, например, посмотрите в 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, но со ссылочными типами, такими как mocks, по конвейеру.

Однако у меня есть другие места, где я использую атрибут TestCase, и Resharper подбирает их и увеличивает количество тестов в тестовой сессии, а референтные - нет.

У меня вопрос, есть ли способ сообщить Resharper (или nUnit), что число увеличивается каждый раз, когда вызывается вышеуказанное действие assertor?

Заранее спасибо;)

1 Ответ

0 голосов
/ 23 ноября 2011

Единственный способ, который я нашел, это сделать с помощью Resharper 6, отбросив отражающий аспект и использовать атрибут TestCaseSource.TestCaseSource будет указывать на статический IEnumerable, выдающий заводской ссылочный тип для каждого теста.См. Документацию ниже:

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

Единственная проблема по сравнению с реализацией вопроса заключается в том, что рефлексивный тест не будет выполнен, если программист не создает макеты для создателя экземпляра, однако тип по-прежнемуподобрал (если он в той же сборке).Поэтому, если ленивый программист создает новый тип, основанный на IService (например), без тестов, в случае неудачи, из коробки.

...