[Test] yönteminin kendisinde birden fazla iddiaya sahip olmanın iyi bir fikir olacağı bir durum bilmiyorum. İnsanların birden fazla iddiaya sahip olmasının ana nedeni, test edilen her sınıf için bir tane [TestFixture] sınıfına sahip olmaya çalışıyor olmalarıdır. Bunun yerine, testlerinizi daha fazla [TestFixture] sınıfına ayırabilirsiniz. Bu, yalnızca ilk iddianın başarısız olduğu yer yerine, kodun beklediğiniz şekilde yanıt vermemiş olabileceği birden çok yolu görmenize olanak tanır. Bunu başarmanın yolu, içinde birçok [TestFixture] sınıfı ile test edilen sınıf başına en az bir dizininiz olmasıdır. Her [TestFixture] sınıfı, test edeceğiniz nesnenin belirli durumundan sonra adlandırılır. [SetUp] yöntemi nesneyi sınıf adıyla açıklanan duruma getirecektir. Daha sonra, nesnenin mevcut durumu göz önüne alındığında, her birinin gerçek olmasını beklediğiniz farklı şeyleri iddia eden çoklu [Test] yöntemlerine sahipsiniz. Her [Test] yöntemine, iddia ettiği şeyden sonra, belki de sadece kodu İngilizce okumak yerine, kavramdan sonra da adlandırması dışında adlandırılır. Sonra her bir [Test] metodu uygulamasında sadece bir şey iddia ettiği tek bir kod satırı gerekir. Bu yaklaşımın bir başka avantajı da testleri çok okunabilir hale getirmesidir, çünkü ne test ettiğinizi ve sadece sınıfa ve yöntem adlarına bakarak ne beklediğinizi net bir şekilde gösterir. Bu aynı zamanda, test etmek istediğiniz tüm küçük kenar durumlarını anlamaya başladığınızda ve hataları bulduğunuzda daha iyi ölçeklenir. Belki de sadece kodu İngilizce okumak yerine kavramdan sonra adlandırılabilir. Sonra her bir [Test] metodu uygulamasında sadece bir şey iddia ettiği tek bir kod satırı gerekir. Bu yaklaşımın bir başka avantajı da testleri çok okunabilir hale getirmesidir, çünkü ne test ettiğinizi ve sadece sınıfa ve yöntem adlarına bakarak ne beklediğinizi net bir şekilde gösterir. Bu aynı zamanda, test etmek istediğiniz tüm küçük kenar durumlarını anlamaya başladığınızda ve hataları bulduğunuzda daha iyi ölçeklenir. Belki de sadece kodu İngilizce okumak yerine kavramdan sonra adlandırılabilir. Sonra her bir [Test] metodu uygulamasında sadece bir şey iddia ettiği tek bir kod satırı gerekir. Bu yaklaşımın bir başka avantajı da testleri çok okunabilir hale getirmesidir, çünkü ne test ettiğinizi ve sadece sınıfa ve yöntem adlarına bakarak ne beklediğinizi net bir şekilde gösterir. Bu aynı zamanda, test etmek istediğiniz tüm küçük kenar durumlarını anlamaya başladığınızda ve hataları bulduğunuzda daha iyi ölçeklenir. ve ne sadece sınıf ve yöntem adlarına bakarak beklediğiniz. Bu aynı zamanda, test etmek istediğiniz tüm küçük kenar durumlarını anlamaya başladığınızda ve hataları bulduğunuzda daha iyi ölçeklenir. ve ne sadece sınıf ve yöntem adlarına bakarak beklediğiniz. Bu aynı zamanda, test etmek istediğiniz tüm küçük kenar durumlarını anlamaya başladığınızda ve hataları bulduğunuzda daha iyi ölçeklenir.
Genellikle bu, [SetUp] yönteminin içindeki son kod satırının, [TestFixture] öğesinin özel bir değişkeninde bir özellik değeri veya değer döndürmesi gerektiği anlamına gelir. Ardından, bu örnek değişken hakkında farklı [Test] yöntemlerinden farklı birçok şey iddia edebilirsiniz. Ayrıca, test edilen nesnenin hangi özelliklerinin şimdi istenen durumda olduğu konusunda ayarlandığı konusunda da iddialarda bulunabilirsiniz.
Bazen nesneyi istenen duruma getirmeden önce karışmadığınızdan emin olmak için teste tabi tutulan nesneyi istenen duruma getirirken yol boyunca iddialarda bulunmanız gerekir. Bu durumda, bu ekstra iddialar [SetUp] yönteminde görünmelidir. [SetUp] yönteminde bir şeyler ters giderse, nesne test etmek istediğiniz istediğiniz duruma gelmeden önce testte bir şeylerin yanlış olduğu açıktır.
Karşılaşabileceğiniz diğer bir sorun, atılmayı bekleyen bir İstisna'yı test ediyor olabilirsiniz. Bu, yukarıdaki modeli takip etmeme konusunda sizi cezbedebilir. Bununla birlikte, [SetUp] yöntemindeki istisnayı yakalayarak ve bir örnek değişkeninde saklayarak yine de elde edilebilir. Bu, her biri kendi [Test] yönteminde istisna hakkında farklı şeyler iddia etmenize olanak sağlar. Daha sonra atılan istisnadan istenmeyen hiçbir yan etki olmadığından emin olmak için test edilen nesne hakkında başka şeyler de iddia edebilirsiniz.
Örnek (bu birden fazla dosyaya bölünür):
namespace Tests.AcctTests
{
[TestFixture]
public class no_events
{
private Acct _acct;
[SetUp]
public void SetUp() {
_acct = new Acct();
}
[Test]
public void balance_0() {
Assert.That(_acct.Balance, Is.EqualTo(0m));
}
}
[TestFixture]
public class try_withdraw_0
{
private Acct _acct;
private List<string> _problems;
[SetUp]
public void SetUp() {
_acct = new Acct();
Assert.That(_acct.Balance, Is.EqualTo(0));
_problems = _acct.Withdraw(0m);
}
[Test]
public void has_problem() {
Assert.That(_problems, Is.EquivalentTo(new string[] { "Withdraw amount must be greater than zero." }));
}
[Test]
public void balance_not_changed() {
Assert.That(_acct.Balance, Is.EqualTo(0m));
}
}
[TestFixture]
public class try_withdraw_negative
{
private Acct _acct;
private List<string> _problems;
[SetUp]
public void SetUp() {
_acct = new Acct();
Assert.That(_acct.Balance, Is.EqualTo(0));
_problems = _acct.Withdraw(-0.01m);
}
[Test]
public void has_problem() {
Assert.That(_problems, Is.EquivalentTo(new string[] { "Withdraw amount must be greater than zero." }));
}
[Test]
public void balance_not_changed() {
Assert.That(_acct.Balance, Is.EqualTo(0m));
}
}
}