2013-07-24 23 views
5

aşağıdaki (eski, öncekilerden miras) gelmiş VB.Net (framework 2.0) Sınıflar ve Yöntemler Bir C# (framework 4.5) Unit Test projesinde ve mantığın bir kısmı, aValue'un bir virgülle ayrılmış iki sayı olmasını gerektirir; bu nedenle, bir istisna ve olay günlüğü atar.Shim bir boşluk yöntemi

ben istisna doğru atılmış emin olmak için aşağıdaki Ünite Testi kurdunuz:

[TestClass] 
public class MyClassUnitTest 
{ 
    private readonly StubMyClass myClass = new StubMyClass(); 

    [TestMethod] 
    [ExpectedException(typeof(InvalidCastException))] 
    public void TestMyMethodInvalidMissingNumber() 
    { 
     this.myClass.MyMethod("0,"); 
    } 
} 

Bu, tüm güzel çalışır ve MyMethod mantığı beklenen duruma neden olur gibi deney, geçer. Ancak, Etkinlik Günlüğünün yazılmasını istemiyorum. Bu yüzden,numaralı aramayı durdurmak ve bunun yerine hiçbir şey yapmamak için MyUtitlityClass'u nasıl kullanabilirim? Ben denemek ve böyle bir desen uygulamak gördüğüm

Tüm Sahte örnekler sahte değeri döndürür yöntemleri için (ve olan C# ile yazılmış tüm!), O LogError bir yok hata veriyor alıcı. C#,

Using context = ShimsContext.Create() 
    ShimMyUtilityClass.LogStringStringException = 
     Sub(aClass As String, aMethod As String, anException As Exception) 
     End Sub 
End Using 

Veya:

+0

üzgün - oluşturucu bir dize terminatör ve biçimleri Meta-Knight @ hatalı – Shevek

+1

olarak VB.Net yorumunu ' '' algılar - için teşekkürler VB yorumlarını nasıl alacağımı gösteriyor! – Shevek

cevap

4

Sana çizgisinde bir şey arıyorsanız düşünüyorum

using (context = ShimsContext.Create()) { 
    ShimMyUtilityClass.LogStringStringException = 
     (string aClass, string aMethod, Exception anException) => { }; 
} 
+0

Harika, harika çalışıyor. Kaybettiğim bit boştu. {} – Shevek

0

Önce MyUtilityClass içeren derleme bir sahte takımını oluşturmak için gereken . Sonra, MyUtility sınıfının shimmed örneğini kullanarak LogError yöntemini alay. şu yardımcı olabilir:

VB.Net kodunda C# yorumlarla ilgili
 using (ShimsContext.Create()) 
     { 
      ShimMyUtilityClass temp = new ShimMyUtilityClass(); 
      temp.LogStringStringException = .... 
      this.myClass.MyMethod("0,"); 
     } 
+0

"LogStringStringException", "temp" nesnesinde görünmüyor – Shevek

+0

Yöntem statiktir, bu nedenle bir örnekte değil tüm Shim üzerinde ayarlamanız gerekir bir Shim. – jessehouwing