2016-02-08 10 views
2

Я хотел бы изучить, что мы можем сэкономить время, установив, что все Moq-mocks, созданные AutoMoq, должны по умолчанию возвращать созданные в Fixture значения в качестве возвращаемых значений метода.Выполнение AutoMoq return Созданные приложением значения для методов

Это было бы полезно при выполнении теста, как в следующем: (?)

[TestMethod] 
public void Client_Search_SendsRestRequest() 
    var client = fixture.Create<Client>(); 

    // Could be removed by implementing the mentioned functionality 
    Mock.Of(JsonGenerator).Setup(j => j.Search(It.IsAny<string>())).Returns(create("JsonBody"))); 

    client.Search(fixture.Create("query")); 

    Mock.Of(client.RestClient).Verify(c => c.Execute(It.IsAny<RestRequest>())); 
    Mock.Of(client.RestClient).Verify(c => c.Execute(It.Is<RestRequest>(r => record(r.Body) == record(client.JsonGenerator.Search(query))))); 
} 

Обратите внимание, что генерируемые значения должны быть в кэше внутри прокси, мы хотим, чтобы то же самое значение «замороженный», чтобы проверить , Кроме того, настройка макета с Setup должна переопределять созданное значение.

Итак, как мы можем модифицировать AutoMoq mocks для этого?

Простой тест проверки того, что она работает может быть:

[TestMethod] 
public void MockMethodsShouldReturnCreatedValues() 
{ 
    Guid.Parse(new Fixture().Create<ITest>().Test()); 
} 

public interface ITest 
{ 
    string Test(); 
} 

ответ

4

Определенно можно просто использовать AutoConfiguredMoqCustomization вместо AutoMoqCustomization. Mocks будет использовать прибор для создания значений возвращаемых значений для всех его методов, свойств и индексаторов (*).

Свойства будут оцениваться с нетерпением, тогда как значения возвратов индексаторов/методов будут оцениваться и кэшироваться при вызове в этот первый раз.

(*) Существует два исключения из этого правила: настройка не может автоматически настраивать общие методы или методы с параметрами ref, как описано here. Вам нужно будет установить их вручную, используя метод .ReturnsUsingFixture.