Örneğinizi alarak (bir miktar yeniden düzenleme ile),
assert(a + b, math.add(a, b));
yardımcı olmuyor:
math.add
Dahili olarak nasıl davrandığını anlamak ,
- Kenar davalarında ne olacağını biliyorum.
Söylediği gibi oldukça:
- Eğer yöntem ne yaptığını bilmek istiyorsanız, gidip (evet, çünkü kendinizi kaynak kod satır yüzlerce görmek
math.add
edebilir ; aşağıya bakınız LOC yüzlerce içerir).
- Yöntemin doğru çalışıp çalışmadığını bilmek istemiyorum. Beklenen ve gerçek değerlerin gerçekten beklediğimden farklı olması sorun değil .
Bu ayrıca, aşağıdaki gibi testler eklemeniz gerekmediği anlamına gelir:
assert(3, math.add(1, 2));
assert(4, math.add(2, 2));
İlk iddiada bulunduklarında, ya da en azından bir kez yardımcı olmazlar, ikincisi işe yarar bir şey getirmez.
Bunun yerine, ne hakkında:
const numeric Pi = 3.1415926535897932384626433832795;
const numeric Expected = 4.1415926535897932384626433832795;
assert(Expected, math.add(Pi, 1),
"Adding an integer to a long numeric doesn't give a long numeric result.");
assert(Expected, math.add(1, Pi),
"Adding a long numeric to an integer doesn't give a long numeric result.");
Bu kendi kendini açıklayıcıdır ve hem sizin hem de kaynak kodunu daha sonra koruyacak olan kişi için çok faydalıdır. Bu kişinin math.add
kodu basitleştirmek ve performansı optimize etmek için küçük bir değişiklik yaptığını ve aşağıdaki gibi test sonucunu gördüğünü hayal edin :
Test TestNumeric() failed on assertion 2, line 5: Adding a long numeric to an
integer doesn't give a long numeric result.
Expected value: 4.1415926535897932384626433832795
Actual value: 4
bu kişi derhal yeni değiştirilen yöntemin argümanların sırasına bağlı olduğunu anlayacaktır: ilk argüman bir tamsayı ve ikincisi uzun bir sayısal ise, sonuç bir tamsayı olurken, uzun bir sayısal bekleniyordu.
Aynı şekilde, 4.141592
ilk iddiadaki gerçek değeri elde etmek kendi kendini açıklayıcı niteliktedir : yöntemin büyük bir hassasiyetle başa çıkmasının beklendiğini biliyorsunuz , ancak aslında başarısız oluyor.
Aynı nedenden ötürü, aşağıdaki iki iddia bazı dillerde anlamlı olabilir:
// We don't expect a concatenation. `math` library is not intended for this.
assert(0, math.add("Hello", "World"));
// We expect the method to convert every string as if it was a decimal.
assert(5, math.add("0x2F", 5));
Ayrıca, ne hakkında:
assert(numeric.Infinity, math.add(numeric.Infinity, 1));
Kendinden açıklamalı: Metodunuzun sonsuzluğa doğru şekilde baş edebilmesini istersiniz. Devam sonsuz ötesinde veya istisna atan beklenen bir davranış değildir.
Ya da belki, dilinize bağlı olarak, bu daha mantıklı olur?
/**
* Ensures that when adding numbers which exceed the maximum value, the method
* fails with OverflowException, instead of restarting at numeric.Minimum + 1.
*/
TestOverflow()
{
UnitTest.ExpectException(ofType(OverflowException));
numeric result = math.add(numeric.Maximum, 1));
UnitTest.Fail("The tested code succeeded, while an OverflowException was
expected.");
}
How does unit testing work?
Kimse gerçekten bilmiyor :)