RE: .NET Fit patch: corrected error message on invalid fixture type

"Jim Little" <[email protected]> Thu, 7 Aug 2003 17:31:55 -0700
Newsgroups gmane.comp.programming.tools.fit.devel
Message-ID <000401c35d44$7a9cc6c0$0300a8c0@Phideaux>
Thanks for the patch, Daniel.  I remember Ron Jeffries telling me about
this.  I like your solution but I want to spend a little time writing a
test case and exploring scenarios.  I'll post to the list when I've
checked it into CVS, probably tomorrow.

Jim

-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Daniel Gackle
Sent: Thursday, August 07, 2003 4:55 PM
To: FIT Developers
Subject: [Fit-dev] .NET Fit patch: corrected error message on invalid
fixture type

Jim,

Here's a change we made to the .NET version of Fit during Ward's seminar
at
the Agile Development Conference in Salt Lake.  This is from the
loadFixture() method in Fixture.cs.  (This source came from
http://fit.c2.com/files/DotNetPlatform/Quick-Start-Fit.zip and the date
on
the file is 4/25/2003.)

The code before we changed it did this:

//
BEFORE
---------------------------------------------------------------------
-
public Fixture loadFixture(string className)
{
	foreach (string assemblyName in assemblies)
	{
		Assembly assembly = Assembly.LoadFrom(assemblyName);

		// We are getting the correct fit.ActionFixture object
instatiated here
...
		object obj = assembly.CreateInstance(className);

		// But we are failing to cast the fit.ActionFixture as a
Fixture here ...
		Fixture fixture = (obj as Fixture);

		if (fixture != null) return fixture;
	}
	throw new ApplicationException("Fixture '" + className + "'
could not be
found in assemblies");
}
//
BEFORE
---------------------------------------------------------------------
-

When the call to CreateInstance created an instance of our type, but our
type didn't inherit from Fixture, the expression "obj as Fixture" was
null,
so the ApplicationException got thrown.  The trouble is that the error
message states incorrectly that the type couldn't be found.  In fact it
was
being found with no trouble- it just wasn't the right type.  This caused
us
to waste some time solving the wrong problem.  Once we figured this out,
we
changed the code as follows:

//
AFTER
----------------------------------------------------------------------
public Fixture loadFixture(string className)
{
	foreach (string assemblyName in assemblies)
	{
		Assembly assembly = Assembly.LoadFrom(assemblyName);

		object obj = assembly.CreateInstance(className);

		if (obj != null)
		{
			return (Fixture) obj; // <------ throws an
InvalidCastException if we
didn't get a Fixture
		}
	}
	throw new ApplicationException("Fixture '" + className + "'
could not be
found in assemblies");
}
//
AFTER
----------------------------------------------------------------------

This distinguishes the two errors.  If the object gets created but isn't
a
Fixture, then .NET will throw an InvalidCastException on the line
indicated.
If it can't be created at all, you get the ApplicationException.  Hope
this
helps.

Regards,
Daniel

-----Original Message-----
From: [email protected]
[mailto:[email protected]]On Behalf Of Jim Little
Sent: Thursday, August 07, 2003 5:21 PM
To: [email protected]
Subject: [Fit-dev] .NET Fit now in CVS

[...]

> Now that I've got the basics set up and working, I'm going to start
bringing the .NET version up to date.  If you have any requests or
patches,
please send them in now.  Don't assume that I've seen prior posts.

[...]

Thanks,
Jim



_______________________________________________
Fit-dev mailing list
[email protected]
http://lists.freepan.org/mailman/listinfo.cgi/fit-dev