2010-02-02 17 views
12

Alaylanmış bir yöntemin bir çağırma parametresini değiştirmek mümkün mü? Özellikle, aşağıdaki örnekte önceden doldurulmuş bir bayt dizisine değiştirmeyi düşünüyorum.Moq ile alay yönteminin bir çağırma parametresini nasıl değiştirebilirim?

Örnek:
int MockedClass.Read(byte[] buffer, int offset, int count)

Açıklama: Read yükleri verilen bayt dizisi buffer içine offset okuma count bayt çağrılması
.

Şimdi, uygulama kodumda Read numaralı çağrı yapıldıktan sonra arabelleğin doldurulmasını istiyorum. Mümkün mü?

Evet ise, Read numaralı telefona nasıl yapılır? Mümkünse her seferinde farklı bir ara belleğe dönmek için sıralı aramalar istiyorum. Birim testi çalıştırırken

MockedClass.Setup(x => x.Read(It.IsAny<byte[]>(), It.IsAny<int>(), It.IsAny<int>()).Callback((byte[] buffer, int offset, int count) => buffer[0] = 0xAA);

bana garip bir sorun verir:

DÜZENLEME: Böyle Setup komutunu kullanarak

Read çağrısı yaptı ve temsilci kod sonra (buffer[0] = 0xAA) hata ayıklayıcısını yürütür, buffer'un aslında null olduğunu ve bu komutu yürüttükten sonra birim test yürütmesinin durduğunu gösterir. Benim sözdizimim büstü mi yoksa bu bir böcek mi?

cevap

14

Geri Arama yöntemini kullanabilirsiniz. Bunun gibi bir şey (bellekten):

var buffer = new byte[64]; 
// ... 
mock.Setup(m => m.Read(buffer, offset, count)) 
    .Callback((buffer, offset, count) => /* fill in buffer here */); 
+0

Merhaba. Cevap için teşekkürler. Bu modeli kullanırsam, birim testi, temsilci yürütüldüğünde geri aramanın en son noktasında duracaktır. Sorunun hata ayıklaması, arabellek bayt dizisinin "boş" olduğunu gösterdi. Bunun neden olabileceği hakkında bir fikrin var mı? –

+0

Atamadığınız sürece boştur. Yukarıdaki Kurulum çağrısı, arabellek değişkenini atamaz * var olan bir değişkenle eşleşir. Düzenlemenizde, 'It.IsAny () 'ile eşleşirsiniz, ancak arayanın değeri sağlaması gerekir. –

İlgili konular