2015-05-19 15 views
6

parametrelerinde geçersiz bir yöntemle alaylıyım NSubstitute uygulamasında yeniyim, void yöntemini 2 out parametresiyle eşleştirmeye çalışıyorum ve eminim yanlış yapıyorum. NSubstitute,

aşağıdaki imzası ile bir yöntem olan bir CustomerDataAccess sınıfı vardır:

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

CustomerRepository sonra CustomerDataAccess.GetCustomerWithAddresses DAL yöntemini çağırdığında onun GetCustomer yöntemi çağırır. DAL yöntemi daha sonra iki tane out parametresini müşteri için, diğeri adresler için çıkarır. Depo yöntemi, daha sonra iki nesneyi DAL yönteminden, depoyu döndürdüğü bir iş alanına eşlemek için AutoMapper10'u kullanır.

Şu ana kadar kullandığım kod şu anda çalışmıyor ve çalışmıyor. Araştırmam, bu sorunu çözmek için ne yapmam gerektiğini tanımlamam için bana yardımcı olmadı. out parametremin değerini nasıl ayarlayabilirim?

// 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); 

cevap

11

out parametreleri bir endeks olarak kendi parametre konumunu kullanarak güncellenir. Returnsdocumentation for NSubstitute'da açıklanmıştır. Yani, özel durumunuz için, ikinci ve üçüncü parametreleri yerleştiriyorsunuz, bu nedenle şu şekilde çağrınızı ayarlamalısınız:

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

İşe yarayanlar dizideki belirli parametrelere erişemediler. – NathanFisherSdk