Moq - 无法模拟类 - 无法隐式转换类型

nul*_*eph 6 .net unit-testing moq

我有一个实现 IQueryResult 并生成 DTO 的公共类。它有一个公共name领域。我创建它只是为了弄清楚发生了什么。这看起来很简单,但我不断收到下面的错误。知道发生了什么事吗?

ProjectsControllerTests.cs(40, 21): [CS0029] 
Unit\ProjectsControllerTests.cs(40,21): error CS0029: 
Cannot implicitly convert type 'Moq.Mock<...Queries.Results.Woot>' 
to '....Queries.Results.Woot'
Run Code Online (Sandbox Code Playgroud)

//类Woot

public class Woot : IQueryResult
{
    public Woot(string name)
    {
        Name = name;
    }

    public string Name { get; }
}
Run Code Online (Sandbox Code Playgroud)

// 在测试类中声明

private static Woot _woot;
Run Code Online (Sandbox Code Playgroud)

// 在SetupClass中模拟

_woot = new Mock<Woot>();
Run Code Online (Sandbox Code Playgroud)

Nko*_*osi 13

该错误表明您正在尝试分配Mock<Woot>Woot变量。

虽然这感觉像是一个XY 问题,但如果您想要模拟对象,您可以调用Mock<T>.Objectproperty

var mock = new Mock<Woot>();
_woot = mock.Object;
Run Code Online (Sandbox Code Playgroud)

或者使用Mock.Of<T>()

_woot = Mock.Of<Woot>();
Run Code Online (Sandbox Code Playgroud)

请参考Moq Quickstart以更好地了解如何使用该框架。