【发布时间】:2012-05-16 15:15:09
【问题描述】:
我们发现自己在许多测试用例中编写重复的夹具/模拟设置 - 就像这种情况:
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var encodingMock = fixture.Freeze<Mock<IEncodingWrapper>>();
var httpClientMock = fixture.Freeze<Mock<IHttpWebClientWrapper>>();
var httpResponseMock = fixture.Freeze<Mock<IHttpWebResponseWrapper>>();
var httpHeaderMock = fixture.Freeze<Mock<IHttpHeaderCollectionWrapper>>();
var etag = fixture.CreateAnonymous<string>();
byte[] data = fixture.CreateAnonymous<byte[]>();
Stream stream = new MemoryStream(data);
encodingMock.Setup(m => m.GetBytes(It.IsAny<string>())).Returns(data);
httpHeaderMock.SetupGet(m => m[It.IsAny<string>()]).Returns(etag).Verifiable();
httpClientMock.Setup(m => m.GetResponse()).Returns(httpResponseMock.Object);
httpResponseMock.Setup(m => m.StatusCode).Returns(HttpStatusCode.OK);
httpResponseMock.SetupGet(m => m.Headers).Returns(httpHeaderMock.Object);
httpResponseMock.Setup(m => m.GetResponseStream()).Returns(stream);
根据测试应该是自包含且从头到尾可读的想法,我们不使用神奇的设置/拆卸方法。
我们能否以任何方式(AutoFixture 自定义、辅助方法)减少这些测试的“繁重工作”?
【问题讨论】:
-
你使用哪个单元测试框架?
-
我已经阅读了这个自成一体的概念并且根本无法同意,或者至少应该以不同的方式解释它。应将相同的生产代码维护规则应用于您的测试。
标签: c# unit-testing nunit moq autofixture