2015-10-20 17 views
2

В настоящее время я использую тестовую структуру, которую я выбрал, используя xUnit, AutoMoq, AutoFixture и AutoFixture.XUnit2. Я сталкиваюсь с проблемами с издевательскими методами с генерическими подписями.Использование методов AutoMoq с общими сигнатурами

AutoFixture, похоже, отлично подходит для обычных вещей. Если я попрошу CustomeObject<Task<List<Task<string>>>> или какой-нибудь другой нелепый вложенный родовой тип, он, похоже, сгенерирует их, как ожидалось, вплоть до последнего узла.

Однако, если у меня есть интерфейс вроде этого:

public interface ITestInterface{ 
    T Get<T>(); 
} 

, а затем попытаться вызвать метод из издеваться я получил от AutoMoq он просто возвращает нуль. Так, например:

[Theory] 
[MyAutoDaqaAttribute] 
public async Task ATest(
    Mock<ITestInterface> service 
) { 
    var result = service.Object.Get<string>(); 
} 

В этом результате код будет равен нулю. Мне это кажется странным. Не следует ли перейти к автосверке и попытаться создать значение типа T, т. Е. Новую строку? Кажется, что Autofixture уже показал, что он может обрабатывать дженерики просто отлично.

Или вам всегда нужно вручную настраивать какой-либо макетный метод, который имеет общую подписи?

ответ

4

Помеченные объекты по умолчанию не проходят через AutoFixture. Однако вы можете использовать AutoConfiguredMoqCustomization.

Однако в вашем случае метод является общим. AutoConfiguredMoqCustomization не работает с общими методами, вам придется вручную настроить метод.

Выдержки из here:

AutoConfiguredMoqCustomization не настроить общие методы либо. Вы можете, однако, легко настроить их с помощью метода ReturnsUsingFixture расширения:

converter.Setup(x => x.Convert<double>("10.0")) 
     .ReturnsUsingFixture(fixture); 
+1

Право, я должен отметить, я способ использования AutoConfiguredMoqCustomizations. Но спасибо за подтверждение того, что AutoConfiguredMoqCustomizations не может настроить общие методы. Так что, похоже, я не могу избежать некоторого уровня настройки, но я мог бы, по крайней мере, избежать необходимости устанавливать возвращаемые значения с помощью функции ReturnsUsingFixture. Я попробую это. Благодарю. – Riplikash

 Смежные вопросы

  • Нет связанных вопросов^_^