Visual Studio Professonal 2008'in test yeteneklerinde ilk, başarısız bir birim sınaması oluşturmaya çalışırken, Assert.ReferenceEquals()
no'lu telefon numarasını elde edemiyorum. Bir nesne örneği boş değere eşit değilken doğru bir şekilde başarısız olur. Aynı karşılaştırma için object.ReferenceEquals()
'un false
doğru şekilde döndüğünü unutmayın. static object TheObject
özelliği asla yüzden, static void Startup(object)
yöntem boş olduğunuAssert.ReferenceEquals() Visual Studio Testinde Object.ReferenceEquals() öğesi 'false' döndürdüğünde geçer
[TestClass()]
public class ProjectTest
{
[TestMethod()]
public void StartupTest()
{
object obj = "hello";
Project.Startup(obj);
Assert.ReferenceEquals(obj, Project.TheObject); // Test Passes!?!
}
}
Not:
public static class Project
{
public static object TheObject { get; set; }
public static void Startup(object theObject)
{
// ToDo: Project.Startup(): Test.
// ToDo: Project.Startup(): Implement.
}
}
Ve sonra burada benim test sınıfının temel özelliği şunlardır: Burada
benim sınıf kodu venull
kalır. Yani, açıkça,
Assert.ReferenceEquals(obj, Project.TheObject)
başarısız olmalı, ancak bir şekilde bu test geçer.
doğru için
Assert.IsTrue(object.ReferenceEquals(obj, Project.TheObject))
nedenleri bu test için
Assert.ReferenceEquals(obj, Project.TheObject)
değişen
Not başarısız olur.
Bu çok basit görünüyor ve yine de neyin yanlış gittiğini göremiyorum. Birisi hatalarımın yolunu çizebilirse, çok fazla zorlanırdım. peşin
sayesinde
Mike James Avery tarafından Yanıtlanmış
Güncelleme:
Ah, şimdi nasıl hissettiğini saçma bir. I ,'un böyle bir şey olması gerektiğini biliyordu. Vay.
Yeterli, 'GoToDefinition' beni 'Object.ReferenceEquals()'. Bu yüzden, "Assert.ReferenceEquals()" yazıp, benim durumumda sessizce "yanlış" olan gerçekten System.Object.ReferenceEquals() yazıyor. Bu, elbette, bir iddiada başarısızlıkla ilgili hiçbir şey yapmaz, bu nedenle testi,'u geçer. Şaşırtıcı.
Teşekkürler James.
Sadece bu aynı aptalca hata ile çarptı. Düşmek çok kolay bir tuzak. Ünite test dersleri, asıl iddiaların girilmemesi durumunda en azından bir uyarıda bulunabileceği gibi görünüyor. En azından yukarıdaki örnek kodunuz ve benim gerçekleştirmeye çalıştığım özellik kontrolü gibi çok basit vakaları yakalayacağım. –
"Ünite test dersleri, en azından gerçek bir İddianamenin çağrılmadığı durumlarda uyarı verebiliyor gibi görünüyor." Bu oldukça ilginç bir fikir ve sadece bu aptal tuzağa karşı korumak için değil. Bunu sevdim. –
Yine de daha iyi bir fikir, Assert sınıfının 'ReferenceEquals' adı verilen ve 'Object.ReferenceEquals' yöntemini gölgeleyecek yeni bir statik yöntem oluşturması ve daha sonra uygun bir hata iletisiyle ObsoleteAttribute ile bu yöntemi işaretlemesidir. Bu şekilde, kullanıcı bu hatayı yapsa uyarılırdı. –