Moq - не может издеваться над классом - не может неявно преобразовать тип - PullRequest
0 голосов
/ 01 октября 2018

У меня есть открытый класс, который реализует 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'

// Класс Woot

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

    public string Name { get; }
}

// Объявлен в тестовом классе

private static Woot _woot;

// Макет в SetupClass

_woot = new Mock<Woot>();

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Я полагаю, что вы создаете макет из конкретной реализации вместо интерфейса.Макет поддается "насмешке" конкретного объекта.

Попробуйте Mock<IQueryResult вместо

Пример: Как я могу использовать Mock Objects в своих модульных тестах и ​​по-прежнему использовать покрытие кода?

0 голосов
/ 01 октября 2018

Ошибка показывает, что вы пытаетесь присвоить Mock<Woot> переменной Woot.

Хотя это похоже на проблему XY , если вы хотите, чтобы вызываемый объект вызывалсяMock<T>.Object property

var mock = new Mock<Woot>();
_woot = mock.Object;

Или используя Mock.Of<T>()

_woot = Mock.Of<Woot>();

Ссылка Moq Quickstart , чтобы лучше понять, как использовать эту платформу.

...