Low level test code / library bleeding edge
From CitconWiki
Jump to navigationJump to search
"bleeding edge" is relative
- some don't know beyond assertEquals/assertTrue
- some use hamcrest
- some use something beyond that :)
Assertions
how to deal with similar assertions easily, e.g in a e-commerce application, Assert.Order(coupon).hasCoupon and Assert.NotOrder(coupon).hasCoupon?
hamcrest
https://code.google.com/p/hamcrest/wiki/Tutorial
- don't couple your expected object to the actual object code, 'coz it makes tests fragile
- write nice object assertors, so if the object under test gets a new required property, you don't have to update your tests (almost like duck typing, only interested in those properties)
- nice failure messages
- beware what you use it together with, e.g.: hamcrest + moquito has caused confusion for some!
- you can create your custom matchers and submatchers
- explicit errors
fest
http://thomassundberg.wordpress.com/2011/04/24/fest-assert-a-fluent-interface-for-assertions/
scenario based testing
e.g.: take a look at ravenDB tests
Pre/post conditions in the langauge
verifications embedded and enforced in the language itself
- Eifel programming language
- code contracts in C#/F#
- problem: with the compiler level implementation, you lose testability - since the compiler fails compiling code that violates these constraints, you cannot add tests making sure these are invalid inputs. So there is no defense against accidentally removing such conditions from the code (no regressions)
- not all languages are like that, some of them are runtime checks and compile time warnings
- guava: in java
Property based testing
- random input generator which is restricted. No more repetability of tests (unless creating a manual test with the values that failed on the build server)
- point to start learning about it: http://www.natpryce.com
---
- Bounded model verification / theorem provers (Biere Armin)
- Model Driven Testing