varsayalım Aşağıdaki varlık var:alaycı Guid.NewGuid()
public class User
{
public int Id { get; set; }
public string Username { get; set; }
public Guid UserGuid { get; set; }
public Guid ConfirmationGuid { get; set; }
}
Ve aşağıdaki arayüz yöntemi:
void CreateUser(string username);
iki yeni Guıd oluşturmalısınız uygulama Bölüm: UserGuid
için bir, ve ConfirmationGuid
için bir başka. Değerleri Guid.NewGuid()
olarak ayarlayarak bunu yapmalıdırlar.
Zaten bir arayüz kullanarak() Guid.NewGuid soyutlamak: tek yeni bir GUID gerektiğinde
public interface IGuidService
{
Guid NewGuid();
}
yüzden kolayca bu taklit. Ancak, iki farklı çağrının, aynı yöntemi kullanarak, bir yöntem içinde, farklı değerler döndürecek şekilde nasıl alay edileceğinden emin değilim. Eğer Moq kullanıyorsanız
Ancak, bu, uygulamadaki özellikleri belirli bir sıraya koyduğumu varsayar mı? Bu benim sınavımın kaygılarını bulanıklaştırmıyor mu? Başka bir deyişle, bu alanlar herhangi bir sıraya göre ayarlanmış olabilir ve eğer bir sebepten dolayı testlerimi güncellemeden bu siparişi değiştirirseniz, testlerim ideal olarak geçmelidir. –
Şey ... devlete karşı davranış testi biraz alıyorsun. Çağrı sırasına ilişkin bilgi varsayımı yapmadan soruyu nasıl cevaplayacağımı bilemiyorum. –
Eğer doğru anlıyorsam, Assert.AreEqual (guid1, user.UserGuid); Assert.AreEqual (guid2, user.ConfirmationGuid); atama sırasını değiştirirseniz başarısız olur. Bunun yerine, emirden bağımsız bir tür tahsilat iddiası kullanmalısınız (hem rahibe hem de mestest'te mevcuttur): 'CollectionAssert.AreEquivalent (yeni [] {guid1, guid2}, new [] {user.UserGuid, user.ConfirmationGuid}) –