gpt4 book ai didi

xunit.net - 使用 AutoNSubstituteData xUnit 和 AutoFixture 在测试中创建 Controller

转载 作者:行者123 更新时间:2023-12-02 23:24:57 26 4
gpt4 key购买 nike

我不相信这个模式,但我正在尝试创建一个像这样的测试:我想创建 Controller ,但可以将依赖项作为 Frozen 参数用于测试。

测试如下。

    [Theory, AutoNSubstituteData]
public void TestService(
[Frozen] ITestService service,
TestController controller,
string value)
{
controller.Test(value);
service.Received().ProcessValue(Arg.Any<string>());
}

测试开始时我收到此错误。

    System.InvalidOperationExceptionAn exception was thrown 
while getting data for theory WebTest.Tests.Controllers.TestControllerRouteTests
.TestService:
System.Reflection.TargetInvocationException:
Exception has been thrown by the target of an invocation. ---> System.NotImplementedException: The method or operation is not implemented.
at System.Web.HttpContextBase.get_Items()
at System.Web.WebPages.DisplayModeProvider.SetDisplayMode(HttpContextBase context, IDisplayMode displayMode)

我已从此 AutoNSubsituteData 创建了 AutoNSubstituteData 属性邮政。我尝试创建一个假上下文来解决该问题。

/// <summary>
/// The auto n substitute data attribute.
/// </summary>
internal class AutoNSubstituteDataAttribute : AutoDataAttribute
{
/// <summary>
/// Initialises a new instance of the <see cref="AutoNSubstituteDataAttribute"/> class.
/// </summary>
internal AutoNSubstituteDataAttribute()
: base(new Fixture()
.Customize(new AutoNSubstituteCustomization())
.Customize(new HttpContextBaseCustomization()))
{
}
}

internal class HttpContextBaseCustomization : ICustomization
{
public void Customize(IFixture fixture)
{
fixture.Customize<ViewContext>(_ => _.OmitAutoProperties());
fixture.Customize<HttpContextBase>(_ => _.FromFactory(() => Substitute.For<HttpContextBase>()));
}
}

最佳答案

这里的问题确实是HttpContextBase.Items邪恶,因为它是一个虚拟属性,总是抛出NotImplementedException

通常情况下,模拟库往往不会默认覆盖虚拟成员,我怀疑 NSubstitute 也是如此。如果这是正确的,一种选择是配置测试替身来覆盖 Items 属性。

另一种选择是要求 AutoFixture 从 Controller 中省略 HttpContext 属性(如果您的测试用例中不需要它)。

关于xunit.net - 使用 AutoNSubstituteData xUnit 和 AutoFixture 在测试中创建 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26582343/

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