Active Conventions with NDepend - Part Deux
July 2, 2008I want to put out a short sequel to my previous post on Active Conventions with NDepend. Also make sure to read Patrick Smacchia's follow-up if your interested.
As you may or may not know, I'm a huge fan of using Test Data Builders for setting up the context for the domain objects in my BDD specifications.
[TestFixture]
public class When_performing_something_action_with_an_order
{
[SetUp]
public void Establish_context()
{
_order = new OrderBuilder()
.WithCustomer(new CustomerBuilder()
.WithFirstName("Homer")
.WithLastName("Simpson"))
.ForProduct(new ProductBuilder()
.WithName("Saxomofoon"))
}
...
}
The biggest benefit of using the Builder pattern this way, is the fact that the creation of domain objects gets decoupled from the specifications itself. The constructor of a domain object gets called only at a single place in the code. If I wanted to add a new parameter to the constructor, I only have to change it in one place.
The following CQL statement ensures that the Test Data Builders are used instead of directly calling the constructors of the domain objects:
// <Name>Test data builders are not used by SetUp methods.</Name>
WARN IF Count > 0 IN
SELECT METHODS
WHERE (HasAttribute "NUnit.Framework.SetUpAttribute"
OR NameIs "Before_each_specification")
AND
((IsDirectlyUsing "NAMESPACE:MyProject.Domain.Model"
OR IsDirectlyUsing "NAMESPACE:MyProject.Domain.DTO")
AND !IsDirectlyUsing "NAMESPACE:MyProject.Domain.UnitTests.Builders")
Although its probably not 100% foul proof, this CQL constraint detects the most blatant violations.
Till next time,
Jan, the NDepend addict.
If you and your team want to learn more about how to write maintainable unit tests and get the most out of TDD practices, make sure to have look at our trainings and workshops or check out the books section. Feel free to reach out at info. @ principal-it .be
Jan Van Ryswyck
Thank you for visiting my blog. I’m a professional software developer since Y2K. A blogger since Y2K+5. Provider of training and coaching in XP practices. Curator of the Awesome Talks list. Past organizer of the European Virtual ALT.NET meetings. Thinking and learning about all kinds of technologies since forever.
Comments
Writing Maintainable
Unit Tests
Watch The Videos
Latest articles
-
Contract Tests - Parameterised Test Cases
June 28, 2023
-
Contract Tests - Abstract Test Cases
April 12, 2023
-
Contract Tests
February 1, 2023
-
The Testing Quadrant
June 15, 2022
-
Tales Of TDD: The Big Refactoring
February 2, 2022
Tags
- .NET
- ALT.NET
- ASP.NET
- Agile
- Announcement
- Architecture
- Behavior-Driven Development
- C++
- CQRS
- Clojure
- CoffeeScript
- Community
- Concurrent Programming
- Conferences
- Continuous Integration
- Core Skills
- CouchDB
- Database
- Design Patterns
- Domain-Driven Design
- Event Sourcing
- F#
- Fluent Interfaces
- Functional Programming
- Hacking
- Humor
- Java
- JavaScript
- Linux
- Microsoft
- NHibernate
- NoSQL
- Node.js
- Object-Relational Mapping
- Open Source
- Reading
- Ruby
- Software Design
- SourceControl
- Test-Driven Development
- Testing
- Tools
- Visual Studio
- Web
- Windows
Disclaimer
The opinions expressed on this blog are my own personal opinions. These do NOT represent anyone else’s view on the world in any way whatsoever.
About
Thank you for visiting my website. I’m a professional software developer since Y2K. A blogger since Y2K+5. Author of Writing Maintainable Unit Tests. Provider of training and coaching in XP practices. Curator of the Awesome Talks list. Thinking and learning about all kinds of technologies since forever.
Latest articles
Contract Tests - Parameterised Test Cases
Contract Tests - Abstract Test Cases
Contract Tests
The Testing Quadrant
Contact information
(+32) 496 38 00 82
info @ principal-it .be