2012-07-09 27 views
11

Birim sınama için NUnit 2.6 ve Moq 4.0 kullanıyorum. Sanal üyelerle ilgili olarak, Moq'un proxy nesnelerine gerçek uygulama için (muhtemelen tasarıma göre) yöntem çağrıları iletmediği özel bir durum söz konusudur. Dersim ...Sanal üyeler alaylı Moq

public class MyClass { 
    protected virtual void A() { 
     /* ... */ 
    } 

    protected virtual void B(...) { 
     /* ... */ 
    } 
} 

vardı ... ve eğer Mesela ben kullanarak ... ... benim test fikstür

var mock = new Mock<MyClass>(); 
mock.Protected().Setup("A").Callback(SomeSortOfCallback); 

GetSomethingElse 'ın A() yöntemi geçersiz kılmak için MOQ kullanın Sahte A yöntemi, muhteşem çalışır; Ancak, söz konusu yöntemde herhangi bir şey, B numaralı yöntemle alay yöntemini çağırırsa, yöntem, MyClass'da gerçek bir uygulama olsa bile, hiçbir şey yapmaz ve/veya varsayılan değerleri döndürür.

Bu konu üzerinde çalışmanın bir yolu var mı? Ahlak yanlış mı kullanıyorum? peşin

sayesinde
Manny

cevap

17

Seti mock.CallBase = true ve gitmek iyi olmalıdır.

+0

Yine de başka yöntemlerle dalga geçmek isterseniz? –

+1

@LouisRhys Bu, bununla etkileşime girmediğinden emin olun - eğer bir şey 'CallBase' ayarını açıkça atarsanız asla oyuna girmez. –

-1
var systemUnderTest = new Moq.Mock<ProcessBulkData> { CallBase = true }; 
systemUnderTest.Setup(s => s.MethodName(...)).Returns(...); 
var actual=systemUnderTest.Object.BulkInsert(...); 
+3

Kodun bazı açıklamasını cevabınızla birlikte eklemeniz daha iyi. – EJoshuaS