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關於更多的細節與起訂量。
是否有良好的資源,在那裏爲起訂量,它們的文檔是相當薄。
太感謝你了! – Sam