What Test-Driven Scaffolding (TDS) does...
TDS is a slightly relaxed version of Test-Driven Development (TDD) for C# projects, providing templates for drivers of function members, such as methods or indexers, and (optionally) generating test reports.
Version 1.8 is available (including examples)
The Visual Studio 2012/2013 version of the code is available on the Downloads tab.
Also, two related working examples of code, beyond those in the TDS tutorial, are included; please see the "Documentation" tab:
- Code derived from TDS for creating/editing the Class-Feature Control Block of a T4 “Text Template” (*.tt or *.t4) file
- Utility to add XML comments to the C# code generated from an Entity Data Model (*.edmx) file
(See the FAQ below for FAQ-style questions..)
When you develop a new function member or modify an existing one, you must often also write some additional calling code that exists only to exercise the code that you are developing -- which is what you're really interested in. The software provided on
this site (as C# source code) is intended to help you quickly produce this exercising or calling code, giving you a template that you may copy and use for this purpose, instead of writing custom code each time. It is intended to be easily modified to provide
inputs to your code, to inspect the results, and to display a report of those results.
Basic instructions and examples are provided in the downloadable C# source-code file. The TDS code can support building a new function member (such as a method), then, after the new code is functional, the TDS code can easily be removed without affecting the
new function member, in a manner similar to removing the scaffolding on a completed building.
The C# code provided in this site can be downloaded and used in a new or existing project, then removed (almost without a trace) when it is no longer needed. The code in TDS.cs is in the public domain and is intended to be modified in any way you might find
useful, without restriction.
The TDS code may be used in any of the following ways:
- Test methods based on the TDS templates may be used as drivers for use in tracing through or debugging the function members that you develop, without involving any unit-testing activity. For example, XSLT files or RegEx patterns can be tricky to develop,
and TDS can help you exercise them by feeding them example inputs and observing the results.
- The TDS built-in test facility may be used, instead of NUnit or Visual Studio Test, in conjunction with test methods based on the TDS templates, to generate unit-test reports on the Console. These reports can be saved for later comparison to verify that
no significant change in behavior has occurred as a result of what was intended to be a refactoring free of unwanted side-effects.
- NUnit or Visual Studio Testing may be used to generate reports of unit tests based on the TDS templates. (TDS test methods can run unchanged with either NUnit or Visual Studio Test.)
If you notice any problems with code or documentation, please post a comment so that corrections can be posted.
The current release has been tested with
Microsoft Visual Studio Express 2013 for Windows Desktop (as well as VS 2012 and VS 2010). It may work with earlier versions but has not been tested with them. It has also been tested with
NUnit 2.6.3 and Microsoft VS Test and appears to work correctly with them, generating results similar to those produced by the stand-alone version of TDS. (See the instructions for examples.)
Design goals included making TDS usable in a minimal development environment, such as with the free-of-charge Express versions of Visual Studio. Once developed, a TDS application may be called from a command prompt to test other code, but the instructions assume
that the TDS test methods are developed with the assistance of Visual Studio.
[Actually, these are not real “frequently asked” questions, but rather are my guess as to likely ones. Please post any questions, comments, or requests in either "DISCUSSIONS" or "ISSUES" on this site.]
How is TDS different from NUnit or VS Test?
TDS test reports, if all TDS filters are disabled, are designed to be almost identical to (a subset of) NUnit or VS Test reports. However, TDS uses a different filtering mechanism to facilitate debugging and tracing. With TDS filters enabled (via suitable
edits to the TDS source code), you may, for example, run a single test case of a single TDS test method, to drill down to some rarely encountered part of your code, without cluttering the report with irrelevant information. This makes it easy to trace into
a location of interest in some function member that is being developed. AFAIAA, it is more difficult to set up VS Test or NUnit to generate similar stimuli to exercise callable code.
Why is this not a Wizard?
This code is distributed exclusively as C# source code, rather than as a Wizard or in some other more automated form, to allow you as much flexibility as possible in incorporating it into your projects. Also, since you have access to all of the source code
in this one file, you can easily examine the code to determine that it is safe to use.
Is it a hassle to install and use TDS?
As I hope the instructions make clear, your first use of TDS will likely involve a modest amount of work, such as familiarizing yourself with its contents and navigation features, trimming out unneeded parts, and customizing the code to fit your project.
I estimate a couple of hours for the initial setup. After that, maybe five minutes should suffice to add a working test method to call a function member that is under development. Visual Studio navigation aids to facilitate this process are addressed in the
Will a new version be published soon?
No, this is probably the last release for a while, except for possible occasional updates to clarify some of the instructions. I have added some example code – see the “Documentation” tab – but TDS.cs has not changed for some months
Unless someone posts a bug report or requests a new feature, I have no current plans to release any further updates to TDS. I am calling this a "stable" version not so much because I think it is free of bugs, as because I am not aware of any bugs.
I hope you are able to find it useful as well. (You are invited to use the "Discussions" tab on this site to post feedback.)