NullableExtender revisited
When I first wrote the post about
DataBinding and Nullable types I never thought that it would become so popular. So without further ado and 'better late than never', here is the
source code.
Whilst we're here, let's take the opportunity to look at how I 'unit' tested the NullableExtender.
Normally, I like my unit tests to be as close to the definition of pure unit test as possible, but in this case we're using a component that needs to play well with DataBinding so we're going to implement our test on an actual Windows Form to provide the necessary framework at minimum cost and minimum hassle.
So let's create a new Windows Form (in our test project) and add the NullableExtender component through the designer as normal.
And now for a little trick
To enable unit testing on your Form simply add the [TestClass] attribute
Note I'm using the Visual Studio Testing facility in this example, but you could equally use Nunit where you'd apply the [TestFixture] attribute instead.
// Turn your form into a Test.
[TestClass]
public partial class NullableExtenderTest : Form
Now open the form and use the designer just as you would at any other time. In my example, I have added two TextBoxes, a BindingSource and a NullableExtender, of course.

To simulate the binding in the form the following code is run in the [TestInitialize] method:
[TestInitialize]
public void TestInitialise()
{
_entityMock = new EntityObject();
entityObjectBindingSource.DataSource = _entityMock;
// enable simulation of binding.
this.Show();
}
And finally, we need to test the Extender:
[TestMethod]
public void TestBindingBeforeNullable()
{
// The different Focus calls simulates databinding.
txtBindingBeforeNullable.Focus();
txtBindingBeforeNullable.Text = "1";
btnFocus.Focus();
Assert.AreEqual(1, _entityMock.NullableInt);
txtBindingBeforeNullable.Focus();
txtBindingBeforeNullable.Text = string.Empty;
btnFocus.Focus();
Assert.AreEqual(null, _entityMock.NullableInt);
}
I like :D