gpt4 book ai didi

c# - 使用最小起订量创建具有自动填充属性的模拟?

转载 作者:可可西里 更新时间:2023-11-01 08:37:40 26 4
gpt4 key购买 nike

我有一个我想模拟的对象(比如 HttpContext 或其他对象)。有时,在某些单元测试中,我不得不模拟大量依赖项,并适本地设置它们的依赖项和值。

下面有一些模拟 httpcontext 和另一个类的示例代码:

    public static HttpContextBase FakeHttpContext()
{
var context = new Mock<HttpContextBase>();
var files = new Mock<HttpFileCollectionBase>();
var request = new Mock<HttpRequestBase>();
var response = new Mock<HttpResponseBase>();
var session = new Mock<HttpSessionStateBase>();
var server = new Mock<HttpServerUtilityBase>();
var user = new Mock<IPrincipal>();
var identity = new Mock<IIdentity>();
request.Setup(req => req.ApplicationPath).Returns("~/");
request.Setup(req => req.AppRelativeCurrentExecutionFilePath).Returns("~/");
request.Setup(req => req.PathInfo).Returns(string.Empty);
request.Setup(req => req.Form).Returns(new NameValueCollection());
request.Setup(req => req.QueryString).Returns(new NameValueCollection());
request.Setup(req => req.Files).Returns(files.Object);
response.Setup(res => res.ApplyAppPathModifier(MoqIt.IsAny<string>())).
Returns((string virtualPath) => virtualPath);
user.Setup(usr => usr.Identity).Returns(identity.Object);
identity.SetupGet(ident => ident.IsAuthenticated).Returns(true);

context.Setup(ctx => ctx.Request).Returns(request.Object);
context.Setup(ctx => ctx.Response).Returns(response.Object);
context.Setup(ctx => ctx.Session).Returns(session.Object);
context.Setup(ctx => ctx.Server).Returns(server.Object);
context.Setup(ctx => ctx.User).Returns(user.Object);

return context.Object;

        registrationView = new Mock<IRegistrationView>();
registrationView.SetupGet(v => v.Address).Returns("Calle test");
registrationView.SetupGet(v => v.EmailAddress).Returns("test@test.com");
registrationView.SetupGet(v => v.Password).Returns("testpass");
registrationView.SetupGet(v => v.FirstName).Returns("Name");
registrationView.SetupGet(v => v.LastName).Returns("Surname");
registrationView.SetupGet(v => v.DaytimePhoneNumber).Returns("666666666");
registrationView.SetupGet(v => v.WholeSalers).Returns(new List<UserWholesaler>() {
new UserWholesaler(true) { CollaborationCode = "1234", Region = "TestReg", WholesalerCode = "10", WholesalerName = "TestWS", RegionName = "RegTest" } });

我想知道:是否有任何库,只要像“registrationView = new MockWithFilledProperties();”这样的调用,就可以让我创建一个 Mock,其属性填充了默认值?如果有,是哪一个?

谢谢你和亲切的问候。

最佳答案

Moq 允许您 stub 所有属性

registrationView.SetupAllProperties();

这将使所有属性跟踪它们的值(即您可以将一些值写入属性并稍后检索它)并将所有属性设置为其默认值。

注意:您可以使用链式模拟创建(又名规范查询)来更快地设置模拟

IRegistrationView view = Mock.Of<IRegistrationView>(ctx =>
ctx.Address == "Calle test" &&
ctx.EmailAddress == "test@test.com" &&
ctx.Password == "testpass" &&
ctx.FirstName == "Name" &&
ctx.LastName == "Surname");

关于c# - 使用最小起订量创建具有自动填充属性的模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24036384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com