2016-11-25 144 views
0

我最近与模块化结构工程由主组件的(我们将其命名为app)和多data-provider的。每个提供程序位于单独的存储库中,并实现一些基本接口,如IDataProvider。任何人都可以实施自己的提供者我为app存储库中的主要功能编写了测试套件(NUnit 3.5)。它应该与每个data-provider一起运行。这个测试套件确保正确的提供者实施运行外部测试套件组装NUnit的测试,在Visual Studio测试运行

因此我需要从特定data-provider组件运行外部测试。当然有环境变量,runner参数等,但我不知道如何使Visual Studio Test Runner显示并从UI执行这些测试。

Git SubmodulesGit Subtrees可以帮助维护从单独的data-provider回购协议的主要app存储库的链接。然而这种方法有一些额外的警告。

很明显,我不是要面对这样的问题的第一人。请分享你的经验。

编辑

我会尽力澄清问题。以下是驻留在“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.dllMainApp.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. 
    } 
} 

如果您想通过转换为某种类型来运行测试,则可以使用泛型。或者您可以创建一个抽象方法,它将返回数据提供者的一个实例,并让提供者的创建者处理该实例化。

+0

它可能工作,但这种方法需要在每个数据提供者项目中的所有测试夹具的复制(至少作为一个子类)。在主要的测试程序集更改的情况下,继承的测试会变得不一致(如果没有固定的类实现,新添加的测试夹具将不会执行)。这正是我想要避免的。 但这是一个有趣的想法。我将尝试使用Reflection.Emit即时创建继承的子测试类,因此子测试类将完全独立于原点。 – kreig