2014-06-28 4 views
8

'u attıran birim testinde iki dizinin karşılaştırılması Hazır kod için bir birim testi yazıyorum ve testlerden birini çalıştırmaya çalışırken beklenmedik bir AssertFailedException alıyorum. Testten çalışıyorum Oyuncu sınıfında Pozisyon özelliği burada olduğuBir AssertFailedException

[TestMethod] 
    public void TestPositionGetter() 
    { 
     testPlayer.Position = new int[] { 1, 3 }; 
     int[] expectedPosition = testPlayer.Position; 
     Assert.AreEqual(expectedPosition, testPlayer.Position); 
    } 

Ve: testini ayıklama

public int[] Position 
    { 
     get 
     { 
      return new int[] { this.PositionX, this.PositionY }; 
     } 
     set 
     { 
      this.PositionX = value[0]; 
      this.PositionY = value[1]; 
     } 
    } 

yerel değişkenler pencere player.Position ve expectedPosition içinde, İşte o benzer görünüyor ama test hala başarısız oluyor. Korkarım sorun referanslardan geliyor.

+0

Hatanızı gönderebilir misiniz? – Neel

+0

Zaten iyi bir yanıt olduğundan, genel olarak IEnumerable nesnelerle ve diğer nesnelerle çalışmak için gerçekten çok güzel bir yöntemi olduğu için FluentAssertions'ı almayı önermek isterim. – TyCobb

+0

@Anri anwer doğruydu, test geçti. –

cevap

21

int[]'un farklı örneklerini karşılaştırıyorsunuz. Assert.AreEqual referans ile karşılaştırır. CollectionAssert.AreEqual'u deneyin.

CollectionAssert.AreEqual(expectedPosition, testPlayer.Position); 

Bu, dizi elemanlarını karşılaştıracaktır.

Ayrıca, Position özellik kötü tasarım gibi kokuyor. Değer aldığınız her seferinde yeni dizi oluşturmanız gerekiyor mu?

+0

Hiçbir fikrim yok, sadece testleri yazmak zorundayım. Ama bana fikrinin ne olduğunu söyle. –

+0

Eh, bütün sınıfı görmem gerekecek, ama burada yapıştırılandan - bu sınıfta 'private int [] _position; 'ı oluşturmalı ve her seferinde yeni dizi oluşturmak yerine bunu alıcının ve ayarlayıcınızda kullanmalısınız. – Anri

+0

İşte bütün sınıf. http://pastebin.com/UvQLbEdb –