2010-06-15 27 views
6

Parametreleri uygulayan bazı eski yöntemlere karşı bir test oluşturmaya çalışıyorum. Bunun nasıl yapılacağını bana bir örnek verebilir misiniz?Moq Örnek dışarı ve ref kullanarak

+2

Ne yaptığınızı ve neden beklendiği gibi çalışmadığını netleştirmeniz gerekir. Sadece "Dışardan parametrelerle" yeterli değil - başlamak için neden Moq'a ihtiyacınız var? Lütfen bazı kodları göster. –

+0

Yeterince adil. Çevre bir şeyleri karmaşık hale getirmek için bir şeyler yapmak zorundayım. Sadece bir yerde tam bir pasaj olup olmadığını merak ettim.Tüm bunlar. Birlikte bir şey koyacağım ve – user9969

cevap

19

Sadece out veya ref parametresini sınamadan atayın. http://code.google.com/p/moq/wiki/QuickStart üstündeki ikinci örnekle yanlış

[TestMethod] 
public void Test13() 
{ 
    string bar = "ploeh"; 

    var legacyStub = new Mock<ILegacy>(); 
    legacyStub.Setup(l => l.Foo(out bar)) 
     .Returns(true); 

    Assert.IsTrue(legacyStub.Object.Foo(out bar)); 
    Assert.AreEqual("ploeh", bar); 
} 
+0

yayınladım. İhtiyacım olan herşeyi tamamla. "It.IsAny" maddesini kullanmamış olsanız da bir şey EG (Foo (out it.IsAny )); Ben bir çeşit gerekli olduğunu düşündüm.Ben açıklığa kavuşturabilir misiniz? Teşekkür ederim. – user9969

+0

Bir sürü It.Is * QuickStart'ta da ... - Ben de düzenli bir şekilde okumanızı öneririm - bunu sindiremezsiniz tek geçiş (ve tek bir test paketine ihtiyacınız varsa, yanlış bir şey yapıyorsunuz!) –

+1

@ devnet247: Bu sizden + 1'e değmez - Mark'ın zamanına çok az saygı gösterir mi? (Birisi de Q1'i +1 verdi - Sanırım bu Mark olduğunu düşünürüm - hiçbir ev ödevi yapmadığı için ona karşı -1). + Bu cevabı vermek. –

2

şey: Böyle bir test yazabilir

public interface ILegacy 
{ 
    bool Foo(out string bar); 
} 

:

Bu arayüzü Verilen? Böyle şeyler aramayacaksanız, yapmaya çalıştığınız şeylerden örnekler vermelisiniz.

+0

Ben katılıyorum.Özellikle gerçek bir "Gerçek Kod" biraz karmaşık ve post it.Ondan bir noddy örnek inşa olmalıydı olarak bu bir başlangıç ​​olarak nerede bilmiyordum.Lesson – user9969

+0

+1 Ben öğrendim quickstart hakkında da unuttum :) –

1

Ayrıca, çıkış parametresiyle dalga geçmek için moq (şu anda) kullanmak isterseniz, aşağıdaki kasnak sıçramasını da yapmanız gerekir. Başka bir alay konusu nesne döndüren bir çıkış parametresiyle dalga geçmek istediğinizi varsayalım.

var mockServiceA = new Mock<IMyService>(); 
var mockServiceOutput = new Mock<IMyServiceOutput>(); 

// This will not work... 
mockServiceA.Setup(svc => svc.DoSomething(out mockServiceOutput.Object)); 

// To have this work you have to do the following 
IMyServiceOutput castOutput = mockServiceOutput.Object; 
mockServiceA.Setup(svc => svc.DoSomething(out castOutput));