Skip to content

Commit e7a9d38

Browse files
committed
Merge pull request #29 from JakeGinnivan/NuGetAndReadmeUpdates
Updated readme and nuspec
2 parents bca48ab + 63171da commit e7a9d38

File tree

3 files changed

+46
-68
lines changed

3 files changed

+46
-68
lines changed

README.md

Lines changed: 34 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,76 +1,47 @@
1-
ConventionTests
2-
===============
1+
TestStack.ConventionTests
2+
=========================
33

44
### What is ConventionTests?
5-
Convention over Configuration is a great way to cut down repetitive boilerplate code. But how do you validate that your code adheres to your conventions? Convention Tests is a code-only NuGet that provides a simple API to build validation rules for convention validation tests.
5+
Convention over Configuration is a great way to cut down repetitive boilerplate code.
6+
But how do you validate that your code adheres to your conventions?
7+
TestStack.ConventionTests is a simple NuGet library that makes it easy to build validation rules for convention validation tests.
68

7-
### Using Con­ven­tion­Tests
8-
Con­ven­tion­Tests is a sim­ple code-only Nuget that pro­vides a min­i­mal­is­tic and lim­ited API enforc­ing cer­tain struc­ture when writ­ing con­ven­tion tests and inte­grat­ing with NUnit. Installing it will add two .cs files to the project and a few depen­den­cies ([NUnit](http://www.nunit.org/), [Castle Wind­sor](http://stw.castleproject.org/Windsor.MainPage.ashx) and [ApprovalTests](http://approvaltests.sourceforge.net/)).
9-
10-
ConventionTests.NUnit file is where all the rel­e­vant code is located and __Run file is the file that runs your tests. The approach is to cre­ate a file per con­ven­tion and name them in a descrip­tive man­ner, so that you can learn what the con­ven­tions you have in the project are by just look­ing at the files in your Con­ven­tions folder, with­out hav­ing to open them.
11-
12-
Each con­ven­tion test inher­its (directly or indi­rectly) from the ICon­ven­tion­Test inter­face. There’s an abstract imple­men­ta­tion of the inter­face, Con­ven­tion­Test­Base and a few spe­cial­ized imple­men­ta­tions for com­mon sce­nar­ios pro­vided out of the box: Type-based one (Con­ven­tion­Test) and two for Wind­sor (Wind­sor­Con­ven­tion­Test, non-generic and generic for diagnostics-based tests).
9+
TestStack.ConventionTests also will generate a convention report of the conventions present in your codebase, which you can publish as **living documentation**
1310

14-
#### Type-based con­ven­tion tests
15-
The most com­mon and most generic group of con­ven­tions are ones based around types and type infor­ma­tion. Con­ven­tions like “every controller’s name ends with ‘Con­troller’”, or “Every method on WCF ser­vice con­tracts must have Oper­a­tionCon­trac­tAt­tribute” are exam­ples of such conventions.
16-
17-
You write them by cre­at­ing a class inher­it­ing Con­ven­tion­Test, which forces you to over­ride one method. Here’s a min­i­mal example
11+
### Using Con­ven­tion­Tests
1812

19-
public class Controllers_have_Controller_suffix_in_type_name : ConventionTest
13+
[Test]
14+
public void DomainHasVirtualMethodsConvention()
2015
{
21-
protected override ConventionData SetUp()
22-
{
23-
return new ConventionData
24-
{
25-
Types = t => t.IsConcrete<IController>(),
26-
Must = t => t.Name.EndsWith("Controller")
27-
};
28-
}
16+
// Define some data
17+
var nHibernateEntities = Tpes.InAssemblyOf<SampleDomainClass>()
18+
.ConcreteTypes().InNamespace(typeof (SampleDomainClass).Namespace)
19+
.ToTypes("nHibernate Entitites");
20+
21+
// Apply convention to data
22+
Convention.Is(new AllMethodsAreVirtual(), nhibernateEntities);
2923
}
3024

31-
#### Windsor-based con­ven­tion tests
32-
Another com­mon set of con­ven­tion tests are tests regard­ing an IoC con­tainer. Cas­tle Wind­sor is sup­ported out of the box. The struc­ture of the tests and API is sim­i­lar, with the dif­fer­ence being that instead of types we’re deal­ing with Windsor’s com­po­nent Han­dlers.
25+
For more information [view the TestStack.ConventionTests documentation](http://docs.teststack.net/conventiontests/index.html)
3326

34-
public class List_classes_registered_in_Windsor : WindsorConventionTest
35-
{
36-
protected override WindsorConventionData SetUp()
37-
{
38-
return new WindsorConventionData(new WindsorContainer()
39-
.Install(FromAssembly.Containing<AuditedAction>()))
40-
{
41-
FailDescription = "All Windsor components",
42-
FailItemDescription = h => BuildDetailedHandlerDescription(h)+" | "+
43-
h.ComponentModel.GetLifestyleDescription(),
44-
}.WithApprovedExceptions("We just list all of them.");
45-
46-
}
47-
}
27+
### Packaged Conventions
28+
Here is a list of some of the pacakged conventions
4829

49-
#### Cus­tom con­ven­tion tests
50-
Say we wanted to cre­ate a con­ven­tion test that lists all of our NHibernate col­lec­tions where we do cas­cade deletes, so that when we add a new col­lec­tion the test would fail remind­ing us of the issue, and force us to pay atten­tion to how we struc­ture rela­tion­ships in the appli­ca­tion. To do this we could cre­ate a base NHiber­nate­Con­ven­tion­Test and NHi­iber­nate­Con­ven­tion­Data to cre­ate sim­i­lar struc­ture, or just build a sim­ple one-class con­ven­tion like that:
30+
- **AllClassesHaveDefaultConstructor** - All classes in defined data must have a default ctor (protected or public)
31+
- **AllMethodsAreVirtual** - All classes in defined data must have virtual methods (includes get_Property/set_Property backing methods)
32+
- **ClassTypeHasSpecificNamespace** - For example, Dto's must live in the Assembly.Dtos namespace'
33+
- **FilesAreEmbeddedResources** - All .sql files are embedded resources
34+
- **ProjectDoesNotReferenceDllsFromBinOrObjDirectories** - Specified project file must not reference assemblies from bin/obj directory
35+
- **MvcControllerNameAndBaseClassConvention** - Enforces MVC controller naming conventions
36+
- Types ending in *Controller must inherit from Controller (or ApiController), and
37+
- Types inheriting from ControllerBase must be named *Controller
38+
- **MvcControllerNameAndBaseClassConvention** - Enforces WebApi controller naming conventions
39+
- Types ending in *Controller must inherit from ApiController (or Controller), and
40+
- Types inheriting from ApiController must be named *Controller
5141

52-
public class List_collection_that_cascade_deletes:ConventionTestBase
53-
{
54-
public override void Execute()
55-
{
56-
// NH Bootstrapper is our custom class to set up NH
57-
var bootstrapper = new NHibernateBootstrapper();
58-
var configuration = bootstrapper.BuildConfiguration();
59-
60-
var message = new StringBuilder("Collections with cascade delete orphan");
61-
foreach (var @class in configuration.ClassMappings)
62-
{
63-
foreach (var property in @class.PropertyIterator)
64-
{
65-
if(property.CascadeStyle.HasOrphanDelete)
66-
{
67-
message.AppendLine(@class.NodeName + "." + property.Name);
68-
}
69-
}
70-
}
71-
Approve(message.ToString());
72-
}
73-
}
42+
If you would like to define your own conventions see [Defining Conventions](http://docs.teststack.net/ConventionTests/DefiningConventions.html)
7443

7544
### Where to find out more
76-
[Krzysztof Koźmic](https://github.com/kkozmic) spoke about ConventionTests at NDC 2012. You can find the video of that talk [here](http://vimeo.com/43676874), slides [here](http://kozmic.pl/presentations/) and the introductory blog post [here](http://kozmic.pl/2012/06/14/using-conventiontests/).
45+
[Krzysztof Koźmic](https://github.com/kkozmic) spoke about ConventionTests at NDC 2012. You can find the video of that talk [here](http://vimeo.com/43676874), slides [here](http://kozmic.pl/presentations/) and the introductory blog post [here](http://kozmic.pl/2012/06/14/using-conventiontests/).
46+
47+
[TestStack.ConventionTests documentation](http://docs.teststack.net/conventiontests/index.html)

TestStack.ConventionTests/TestStack.ConventionTests.csproj

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,7 @@
5454
<Reference Include="System.Core" />
5555
<Reference Include="System.Web" />
5656
<Reference Include="System.Xml.Linq" />
57-
<Reference Include="System.Data.DataSetExtensions" />
5857
<Reference Include="Microsoft.CSharp" />
59-
<Reference Include="System.Data" />
6058
<Reference Include="System.Xml" />
6159
</ItemGroup>
6260
<ItemGroup>
@@ -116,7 +114,8 @@
116114
Other similar extension points exist, see Microsoft.Common.targets.
117115
<Target Name="BeforeBuild">
118116
</Target>
117+
-->
119118
<Target Name="AfterBuild">
119+
<Copy SourceFiles="..\Readme.md" DestinationFiles="$(OutputPath)\Readme.txt" />
120120
</Target>
121-
-->
122121
</Project>

TestStack.ConventionTests/TestStack.ConventionTests.nuspec

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,23 @@
22
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
33
<metadata>
44
<version>$version$</version>
5-
<authors>Krzysztof Kozmic</authors>
6-
<owners>Krzysztof Kozmic</owners>
5+
<authors>Krzysztof Kozmic, Jake Ginnivan</authors>
6+
<owners>Krzysztof Kozmic, Jake Ginnivan</owners>
77
<id>ConventionTests</id>
88
<title>ConventionTests</title>
9+
<tags>xunit nunit convention testing documentation</tags>
910
<requireLicenseAcceptance>false</requireLicenseAcceptance>
1011
<description>Simple convention-tester</description>
1112
<summary>Simple library offering a simple way to test conventions.</summary>
13+
<projectUrl>https://github.com/TestStack/ConventionTests</projectUrl>
14+
<licenseUrl>https://github.com/TestStack/ConventionTests/blob/master/license.txt</licenseUrl>
15+
<releaseNotes>v2 Release Highlights
16+
- Can be used with any unit testing framework
17+
- Outputs html convention report with your project conventions (living doco)
18+
- Pre-packaged conventions</releaseNotes>
1219
<dependencies>
1320
<dependency id="Mono.Cecil" />
21+
<dependency id="ApprovalTests" />
1422
</dependencies>
1523
</metadata>
1624
<files>

0 commit comments

Comments
 (0)