2015-05-19 4 views
6

Я новичок в NSubstitute, я пытаюсь высмеять метод void с параметрами 2 out, и я уверен, что делаю это неправильно.NSubstitute mock void method без параметров

У меня есть CustomerDataAccess класса, который имеет метод со следующей подписью:

void GetCustomerWithAddresses(int customerId, 
           out List<Customer> customers, 
           out List<Address> addresses); 

CustomerRepository называет его GetCustomer метода, который затем вызывает метод CustomerDataAccess.GetCustomerWithAddresses DAL. Затем метод DAL выводит два параметра out, один для клиента, и один для адресов. Затем метод репозитория использует AutoMapper для сопоставления двух объектов из метода DAL в бизнес-домен, который затем возвращает репозиторий.

Вот код, который у меня есть, и он не работает. Мои исследования не помогли мне определить, что мне нужно сделать, чтобы исправить эту проблему. Как установить значение моих параметров out?

// Arange 
ICustomerDataAccess customerDataAccess = Substitute.For<ICustomerDataAccess>(); 
IList<Customer> customers; 
IList<Address> addresses; 

customerDataAccess.When(x => x.GetCustomerWithAddresses(
    1, out customers, out addresses)) 
    .Do(x => 
    { 
     customers = new List<Customer>() { new Customer() { CustomerId = 1, CustomerName = "John Doe" } }; 
     addresses = new List<Address>() { new Address() { AddressId = 1, AddressLine1 = "123 Main St", City = "Atlanta" } }; 
    }); 

CustomerRepository sut = new CustomerRepository(customerDataAccess); 

// Act 
Customer customer = sut.GetCustomer(1); 

// Assert 
Assert.IsNotNull(customer); 

ответ

11

out параметры обновляются с использованием их позиции параметра в качестве индекса. Это объясняется в Returnsdocumentation for NSubstitute. Таким образом, для вашего конкретного случая, вы заселение второй и третий параметры, так что вы должны быть настройки вашего вызова, как это:

customerDataAccess.When(x => x.GetCustomerWithAddresses(1, out customers, out addresses)) 
.Do(x => 
{ 
    x[1] = new List<Customer>() { new Customer() { CustomerId = 1, CustomerName = "John Doe" } }; 
    x[2] = new List<Address>() { new Address() { AddressId = 1, AddressLine1 = "123 Main St", City = "Atlanta" } }; 
}); 
+0

Да, что работал я отсутствовал доступ конкретных параметров в массиве. – NathanFisherSdk

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