Unit Testing Anti-Pattern: Code Matching
Sometimes, tests imitate code, and not in a good way. Here’s our tested code: public String encode(String word) { String result = word + word.length(); return result; } And here’s our test: @Test public void howItsDone() { Encoder enc = new Encoder(); String input = “hello”; String result = enc.encode(input); Read more…
Unit Testing Anti-Pattern: Misleading Tests
You’re testing the right thing, and the test passes, and everything is cool. Or is it? Check out this test: @Test public void encodeString_sizeAtEnd() { Encoder enc = new Encoder(); String result = enc.encode(“hello”); assertEquals(“hello5”, result); } This test looks ok. I bet that without looking at the implementation, you Read more…
Unit Tests Anti-patterns: TDD without refactoring
Anti-patterns are patterns with negative consequences. In this series I’m going to tackle those patterns, explain what they signify in terms of risks, and what to do instead. Let’s look at a pattern common to people who start out on their TDD journey: They forget to refactor. When they do, Read more…
TDD In Real Life – Part 2
Last time we’ve started talking about how to approach TDD in real, complex systems. While plain vanilla TDD assumes nothing about the world around our component, in real life, there are constraints we need to relate to. Where we stopped, we talked about rethinking the order of work, based on Read more…
TDD In Real Life – Part 1
TDD comes from the world of unit testing. It’s optimized for small pieces of code; small increments of functionality. BDD takes the test-first approach, adds functional and user semantics and tries to follow the same formula for the whole software. TDD helps us build a class or a module. But Read more…