我最近的模块化结构项目包括主程序集(我们将其命名为app
)和多个data-provider
。每个提供程序都位于单独的存储库中,并实现一些基本接口,例如IDataProvider
。任何人都可以实现自己的提供者我已经编写了一个测试套件(NUnit 3.5),用于驻留在app
存储库中的主要功能。它应该与每个data-provider
一起运行。此测试套件可确保正确的提供程序实现。
因此,我需要从特定的data-provider
运行外部测试程序集。当然还有环境变量,运行器参数等,但我不知道如何使用Visual Studio Test Runner显示并从UI执行这些测试。
Git Submodules或Git Subtrees可以帮助维护与单独的app
存储库中的主data-provider
存储库的链接。然而,这种方法还有一些额外的注意事项。
很明显,我不是第一个面对这种问题的人。请分享您的经验。
修改:
我会试着澄清这个问题。以下是位于“main-app”存储库中的“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项目包含对已编译的MainApp.dll
和MainApp.Tests.dll
的引用。我需要使用Visual Studio Test Runner从SimpleProvider项目中的MainApp.Tests.dll
运行测试。
答案 0 :(得分:0)
我建议创建一个TestInfrastructure dll,可以将其发送给创建其数据提供者的用户。然后,用户可以创建一个继承自基类的测试类来运行常见测试。
namespace MainApp.SimpleProvider.Tests
{
[TestFixture]
public class SimpleProviderTests : DataProviderTests
{
// Add here specific tests if you want.
}
}
如果要通过强制转换为某种类型来运行测试,则可以使用泛型。或者,您可以创建一个抽象方法,该方法将返回数据提供者的实例,并让提供者的创建者处理实例化。