TL; DR:按照标题:如何运行相同的测试但设置不同?
我正在使用C#,Visual Studio,通过Azure DevOps(nee VSTS)部署到Azure中的WebApp。
正在开发的软件可在Azure中配置资源,并在Azure Active Directory中配置身份。
这意味着我要进行以下测试:
[Fact]
public void ShouldCreateAzureDevOpsProject()
{
_azureDevOpsHelper.GetAzureDevOpsProject(_projectName).Should().NotBe(null);
}
[Fact]
public void ShouldPutDefaultFileInRepo()
{
_azureDevOpsHelper.GetDefaultFileFromRepo(_projectName).Should().NotBe(null);
}
[Fact]
public void ShouldEnableAllMicrosoftResourceProviders()
{
_azureSubscriptionHelper.GetMicrosoftResourceProviders().Select(x => x.RegistrationState).Should().NotContain("NotRegistered");
}
我想在编写代码时针对这些代码运行这些测试。该代码在我的笔记本电脑上运行,因此设置(我目前在xUnit Fixture中具有)是
new EngineOrchestrator.EngineOrchestrator().RequestInstance(userSuppliedConfiguration);
但是这些测试同样适用于在我们的部署管道中运行,以在部署到我们的测试环境后检查回归。 为此,设置过程将涉及创建HTTP客户端,并访问应用程序的端点。
要点是,无论设置如何,测试都是相同的。在“本地”和“管道”情况下,要测试的值均来自json配置文件;通过在部署过程中潜入不同的配置文件来进行测试,可以实现隔离。
另辟;径; 我正在尝试找出如何封装设置的方法,以便两个不同的设置可以共享相同的测试。这与固定装置等所做的相反,在该测试中,多个测试可以共享同一设置。
if (Environment.MachineName.StartsWith("Plavixo"))
{
new EngineOrchestrator.EngineOrchestrator().RequestInstance(userSuppliedConfiguration);
}
else
{
HttpEngineHelper.RunOrchestrator(userSuppliedConfiguration, authenticationDetails);
}
这是我当前的解决方案,但是它感觉很脆弱,并且使测试工件变得巨大,因为它必须包括所有能够更新Engine的资源,即使它要在构建计算机上运行。
public class LocalBootstrap : BootstrapTests.BootstrapTests
{
public LocalBootstrap():base()
{
//do specific setup here
public abstract class BootstrapTests
{
[Fact]
public void ShouldCreateAzureDevOpsProject()
这种方法有效,但是设置要在每次测试之前进行,这很有意义:"xUnit.net creates a new instance of the test class for every test that is run, so any code which is placed into the constructor of the test class will be run for every single test."
一个fixture runs once,在测试之间共享。我尝试将灯具抽象化,并为每个装置设置了具体的课程。
xUnit抛出System.AggregateException:类固定装置类型只能定义单个公共构造函数。 github issue引用了该名称,该名称已关闭为“按设计”
这是我要调查的下一个选择。这是个好主意吗?
还有什么我应该尝试的吗?