相关疑难解决方法(0)

Moq,严格vs宽松使用

在过去,我只使用了Rhino Mocks,典型的严格模拟.我正在与Moq合作开展一个项目,我想知道正确的用法.

假设我有一个方法Bar的对象Foo,它在对象Buzz上调用Bizz方法.

在我的测试中,我想验证Bizz是否被调用,因此我觉得有两种可能的选择:

用严格的模拟

var mockBuzz= new Mock<IBuzz>(MockBehavior.Strict);
mockBuzz.Setup(x => x.Bizz()); //test will fail if Bizz method not called
foo.Buzz = mockBuzz
foo.Bar();
mockBuzz.VerifyAll();
Run Code Online (Sandbox Code Playgroud)

随着一个松散的模拟

var mockBuzz= new Mock<IBuzz>();    
foo.Buzz = mockBuzz
foo.Bar();
mockBuzz.Verify(x => x.Bizz()) //test will fail if Bizz method not called
Run Code Online (Sandbox Code Playgroud)

有这样做的标准或正常方式吗?

.net c# unit-testing moq mocking

49
推荐指数
4
解决办法
2万
查看次数

尝试为 ASP.Net Core 3.1 单元测试创​​建 Mock.Of&lt;ControllerContext&gt;() 时出错

根据此处定义的 Moq 快速入门的最后一部分,我尝试配置以下模拟,以便将表单值传递给测试中的控制器方法:

var formCollection = new FormCollection(
                new System.Collections.Generic.Dictionary<string, Microsoft.Extensions.Primitives.StringValues>()
            {
                    {"mAction", "someAction" },
                    {"mRefId", "0" }
            });

        var controllerContext = Mock.Of<ControllerContext>(ctx =>
            ctx.HttpContext.Request.Form == formCollection);
        
        controller.ControllerContext = controllerContext;
Run Code Online (Sandbox Code Playgroud)

但是,当运行测试时,它失败Mock.Of<>并出现以下错误:

System.NotSupportedException:不支持的表达式:mock => mock.HttpContext

不可重写的成员(此处:ActionContext.get_HttpContext)不得在设置/验证表达式中使用。

我缺少什么?我是否按照快速入门文档中定义的示例执行相同的操作?

c# unit-testing moq asp.net-core

4
推荐指数
1
解决办法
2634
查看次数

标签 统计

c# ×2

moq ×2

unit-testing ×2

.net ×1

asp.net-core ×1

mocking ×1