2012-09-19 40 views
0

我開始玩xUnit和Moq,並想知道我是否正確。適用於在單元測試中測試條件正常的循環嗎?

我應該寫測試是這樣的:

[Fact] 
public void ForWebShouldReturnDev() 
{ 
    // Arrange 
    var server = new Mock<HttpServerUtilityBase>(); 
    server.SetupSequence(s => s.MachineName).Returns("t11466").Returns("localhost").Returns("webdev"); 

    var context = new Mock<HttpContextBase>(); 
    context.SetupGet(c => c.Server).Returns(server.Object); 

    var service = new EnvironmentService(context.Object, null); 

    // Act/Assert 
    service.GetApplicationEnvironment().Should().Be(ApplicationEnvironment.Dev); 
    service.GetApplicationEnvironment().Should().Be(ApplicationEnvironment.Dev); 
    service.GetApplicationEnvironment().Should().Be(ApplicationEnvironment.Dev); 
} 

還是更喜歡這樣的:

[Fact] 
public void ForWebShouldReturnDev() 
{ 
    // Arrange 
    var server = new Mock<HttpServerUtilityBase>(); 

    var context = new Mock<HttpContextBase>(); 
    context.SetupGet(c => c.Server).Returns(server.Object); 

    var service = new EnvironmentService(context.Object, null); 

    // Act/Assert 
    foreach (var name in new string[] { "t11466", "localhost", "webdev" }) 
    { 
     server.Setup(s => s.MachineName).Returns(name); 
     service.GetApplicationEnvironment().Should().Be(ApplicationEnvironment.Dev); 
    } 
} 

我知道你只應該測試每個測試代碼的一個單元,但是當存在變數測試是否可以通過assert循環?

我無法找出測試這些類型的東西的最佳方式。

爲了記錄在案,下面是測試中的實際代碼:

// The constructor for the application environment 
public EnvironmentService(HttpContextBase httpContext, IEnvironment environment) 
{ 
    this.environment = environment; 
    this.httpContext = httpContext; 
} 

private readonly Dictionary<ApplicationEnvironment, string> applicationEnvironments = new Dictionary<ApplicationEnvironment, string>() { 
    { ApplicationEnvironment.Dev, "DEV" }, 
    { ApplicationEnvironment.Test, "TEST" }, 
    { ApplicationEnvironment.QA, "QA" }, 
    { ApplicationEnvironment.Prod, "PROD" } 
}; 

public ApplicationEnvironment GetApplicationEnvironment() 
{ 
    var machine = IsWeb ? httpContext.Server.MachineName : environment.GetCommandLineArgs().First(); 

    return applicationEnvironments.FirstOrDefault(x => machine.ToUpper().Contains(x.Value)).Key; 
} 

我還有一個問題在那裏here關於更多的細節與起訂量。

是否有良好的資源,在那裏爲起訂量,它們的文檔是相當薄。

回答

1

如果使用NUnit我會親自使用[TestCase]屬性,這樣你還在測試一個東西,但是用一組的情況下進行測試的。

類似的東西存在的xUnit,在這篇文章中解釋 in this SO post

+0

太感謝你了! – Sam