2010-08-19 15 views
20

Bir argüman nesnesini parametre olarak alan bir alamet var. Nesnedeki değerlere dayanarak bir sonuç vermek istiyorum. Eşitliklerin geçersiz sayılmadığı için nesneleri kıyaslayamıyorum.Rhino Mocks - Arg.Matches Kullanımı

Aşağıdaki kod var:

_tourDal.Stub(x => x.GetById(Arg<TourGet>.Matches(y => y.TourId == 2), null)).Return(
       new Tour() 
       { 
        TourId = 2, 
        DepartureLocation = new IataInfo() { IataId = 2 }, 
        ArrivalLocation = new IataInfo() { IataId = 3 } 
       }); 

Bu ürünle parametre 2.

çalışması gerektiği gibi bu görünüyor

bir TourId sahip olduğunda belirtilen nesneyi döndürmek kaplaması gerekir bunu çalıştırdığınızda,

Arg kullanarak tüm argümanlar Arg.Is, Arg.Text, Arg.List, Arg.Ref veya Arg.Out kullanılarak tanımlanmalıdır: aşağıdaki özel durum alıyorum. 2 argüman beklenen, 1 tanımlanmıştır.

Bunu çözmek için ne yapmam gerekiyor?

cevap

24

Sen ikinci boş argüman için aynı sözdizimini kullanmak gerekir, bu satırlar boyunca bir şey (Ben test etmedim):

_tourDal.Stub(x => x.GetById(Arg<TourGet>.Matches(y => y.TourId == 2), Arg<TypeName>.Is.Null)).Return(
      new Tour() 
      { 
       TourId = 2, 
       DepartureLocation = new IataInfo() { IataId = 2 }, 
       ArrivalLocation = new IataInfo() { IataId = 3 } 
      }); 
+7

. Biliyorum, bu hata mesajını yazdım ... –

6

Çözüldü: doğru cevabı var

 _tourDal.Stub(x => x.GetById(new TourGet(2), null)) 
      .Constraints(new PredicateConstraint<TourGet>(y => y.TourId == 2), new Anything()) 
      .Return(
      new Tour() 
      { 
       TourId = 2, 
       DepartureLocation = new IataInfo() { IataId = 2 }, 
       ArrivalLocation = new IataInfo() { IataId = 3 } 
      }); 
+3

Eğer argümanlar daha sonra yoksayılsın, çünkü argümanlar gözardı ediliyor ama okuyucuyu karıştırıyorlarsa, saplamada herhangi bir argüman geçmemelisin. –

+0

Bu gerçekten benim için çalıştı, teşekkürler. – ShahidAzim

İlgili konular