2016-11-25 3 views
0

Мой недавний проект с модульной структурой состоит из основной сборки (назовем ее app) и нескольких data-provider. Каждый провайдер находится в отдельном репозитории и реализует некоторый базовый интерфейс, скажем IDataProvider. Любой человек может реализовать собственный провайдер. Я написал набор тестов (NUnit 3.5) для основных функций, которые находятся в репозитории app. И он должен запускаться с каждым data-provider. Этот набор тестов обеспечивает правильную реализацию поставщика.Запуск тестов NUnit из сборки внешнего тестового набора в Visual Studio Test Runner

Поэтому мне нужно выполнить сборку внешних тестов от конкретного data-provider. Конечно, есть переменные среды, аргументы runner и т. Д., Но я не знаю, как сделать визуализацию Visual Studio Test Runner и выполнить эти тесты из пользовательского интерфейса.

Git Submodules или Git Subtrees может помочь поддержать ссылку на основной реквизит app из отдельных data-provider repo. Однако этот подход имеет некоторые дополнительные оговорки.

Очевидно, что я не первый человек, столкнувшийся с такой проблемой. Пожалуйста, поделитесь своим опытом.

EDIT:

Я попытаюсь прояснить этот вопрос. Вот код «приложения», который находится в репозитории «main-app».

// repository "main-app" 
namespace MainApp 
{ 
    public interface IDataProvider 
    { 
     string Concat(params string[] arg); 
    } 
} 
namespace MainApp.Tests 
{ 
    [TestFixture] 
    public class SampleTests 
    { 
     [Test] 
     public void GetDataTest(IDataProvider provider) 
     { 
      Assert.AreEqual("ab", provider.Concat("a", "b")); 
     } 
    } 
} 

А вот реализация поставщика (находится в отдельном хранилище)

// repository "simple-provider" 
namespace MainApp.SimpleProvider 
{ 
    public class SimpleProvider : IDataProvider 
    { 
     public string Concat(params string[] arg) 
     { 
      return string.Concat(arg); 
     } 
    } 
} 

SimpleProvider проект conatins ссылки на составленный MainApp.dll и MainApp.Tests.dll. Мне нужно запустить тесты с MainApp.Tests.dll внутри проекта SimpleProvider с помощью Visual Studio Test Runner.

+0

Просьба показать необходимые скриншоты для иллюстрации. Слова просто сухие. –

ответ

0

Я бы порекомендовал создать dll TestInfrastructure, который может быть отправлен пользователю, создав поставщика данных. Затем пользователь может создать класс тестирования, наследующий от вашего базового класса, для запуска общих тестов.

namespace MainApp.SimpleProvider.Tests 
{ 
    [TestFixture] 
    public class SimpleProviderTests : DataProviderTests 
    { 
     // Add here specific tests if you want. 
    } 
} 

Вы можете использовать дженерики, если вы хотите запустить тесты путем литья в какой-либо тип. Или вы можете создать абстрактный метод, который вернет экземпляр dataprovider и позволит создателю провайдера обрабатывать экземпляр.

+0

Это может сработать, но такой подход требует репликации (по крайней мере, как дочернего класса) всех тестовых устройств в каждом проекте поставщика данных. Унаследованные тесты становятся несогласованными в случае изменений основной сборки теста (недавно добавленные тестовые приборы не будут выполняться без внедрения неактивного класса). И это именно то, чего я пытаюсь избежать. Однако это интересная мысль. Я попытаюсь создать унаследованные классы тестовых тестов на лету с помощью Reflection.Emit, поэтому классы детского теста будут полностью происходить - агностик. – kreig