Object Test Bench (VS 2005)
Object Test Bench is a new Visual Studio 2005 feature that helps you understand objects at Design Time, rather then runtime. How many times have you walked up to a code base and created some simple test console/Windows/web applications just to run a couple of methods on a class? Like the immediate window, Object Test Bench allows you to creating instances of classes invoke class methods (static or instance) just by right-clicking on an object. There are two ways to use Object Test Bench, the first is from Class View and the second is from Class Designer. The Class Designer diagram below shows a simple object hierarchy with an abstract base Animal class and two derived classes, Dog and Parakeet.
From Class Designer, you can right click on an object and select Invoke Static Method and you'll see a list of the static methods available for the particular object.
Selecting it shows a dialog box with information about the method
After you invoke the method, you'll see whether it ran successfully and it shows the return type and the return value. In this example, the CanSwim() method returns a boolean "True" value.
Running static methods is pretty easy and something you can do with Design Time Express Evaluation (DTEE). Let's make it slightly more complicated by actually creating an instance of a class. In this case, we'll create an instance of the Parakeet class by right clicking on the class.
You'll see the options available to create the Parakeet class and we have the option to provide a name for the class. In this example, I'll name our Parakeet "Polly".
What you'll see is the Object Test Bench window which shows the objects that have been created. From the Object Test Bench Window, you can right click on Polly, our newly created instance, and invoke any of the instance methods.
In the case of the Parakeet class, we have an overloaded instance method named Speak - one parameterless, one that takes a string parameter.
public class Parakeet : Animal
{
public string Speak(string echo)
{
return "brwwak " + echo;
}
public override string Speak()
{
return "brwwak";
}
}
We'll select the Speak overload with a string parameter and select the method that expects a string. The dialog shows the method invocation dialog that expects a string parameter which I'll set to "hello".
After the method is invoked, we see the results "brwwak, hello" that returns a string object successfully. If you notice the checkbox, you can actually add the value directly to the Object Test Bench window. In fact, we can use all the cool debugger visualizers for the return value to inspect the value.
Comments
Anonymous
January 26, 2005
Missing picture references...Anonymous
January 26, 2005
Looks great! :)
What I do wonder though is... isn't this all very time consuming? I mean... what if the developer could just type in 2 lines of code:
Parakeet polly = new Parakeet("polly");
string result = polly.Speak("Hello");
Wouldn't that be faster, from the developer's POV? Now he has to click through a lot of tiny dialogs. Tools like the SnippetCompiler by Jeff Key do similar things but have one disadvantage: they don't have setup the references correctly, and inside vs.net you have, right there, so having a kind of snippet compiler interface to the codebase you're working with, without the dialogs and mousing, would be very helpful. I'm not sure if there is a textbased interface to the object test bench engine though... but if there isn't it would be a great addition. :)Anonymous
January 26, 2005
<p><ul><li>Nehéz és hosszú szülés után... ami főleg időhiánynak köszönhető... kérjük azokat, akik szívesen olvasnak (=azt a keveset), hogyha talál vmi érdekeset, akár el is küldheti :)</li><li><a href="htAnonymous
January 26, 2005
Thanks Chris, there was a problem with my hoster not recycling connections to the connection pool. It seems okay now :)Anonymous
January 26, 2005
Hey Frans,
I agree with you, the OTB visual tools (and some have argued Class Designer) are probably for the less experienced developer or a developer approaching a code base that isn't as easy to understand through 1-2 lines of code. There isn't a text-based interface to OTB, but we are also looking to expand the functionality of design time expression evaluation (DTEE is getting there, but still lacks what you're looking for) to do what you've requested.Anonymous
January 27, 2005
The comment has been removedAnonymous
January 27, 2005
The comment has been removedAnonymous
January 27, 2005
Last time I looked this great feature is C#-only. For any VBers wanting it, feel free to vote here:
http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=7ec42e6a-8e3b-47be-8c5c-012c4202c0ec
(Sorry Dan for using your blog entry for this)Anonymous
January 29, 2005
Looks great but can't find the object test bench methods on my December CTP,does it includes OTB?
-CorradoAnonymous
February 09, 2005
The Developer Division TeamAnonymous
February 23, 2005
I guess that with complex objects the Object test might be useful.
What would be nice if you could do the Object test from the console inside the IDE).
Instead of all the Mouse-clicking between the dialog boxes.Anonymous
March 28, 2005
Object Test BenchAnonymous
March 30, 2005
February CTPAnonymous
April 11, 2005
Just for comparison,
in Smalltalk you can enter code like:
polly := Parakeet new: 'polly'.
result := polly speak: 'Hello'.
into any workspace/text -window.
Then select the above with mouse,
and choose from menu 'do it', or
more often 'inspect it'.Anonymous
May 22, 2005
The comment has been removedAnonymous
May 22, 2005
The comment has been removedAnonymous
May 22, 2005
The comment has been removedAnonymous
May 23, 2005
I know that great minds can think alike, but this seems to follow the same metaphors of a too lthat has been available for java developers in education for 6 years. Check out the link and note the similarities. Then send some email to Dr. Kolling to say thank you.Anonymous
May 30, 2005
whatafucka?
MS humm...Anonymous
June 02, 2005
The comment has been removedAnonymous
June 02, 2005
The comment has been removedAnonymous
June 14, 2005
[Please read my Disclaimer]
NOTE: I don't own Object Test Bench,&nbsp;I just happened to blog about...Anonymous
July 13, 2005
I'll add my voice to those lamenting Microsoft's ripping off a good idea from the lovely, free BlueJ and claiming it as their own innovation. Shame on Microsoft. Kudos to BlueJ.Anonymous
February 08, 2006
A customer recently emailed me asking why Object Test Bench doesn't work for Web projects and it seems...Anonymous
February 14, 2006
When i try to use this i get the following error:
0x80004005
I dont get any description. Can anyone help?Anonymous
February 14, 2006
Hey Simon, can you provide more information on exactly what you're doing?Anonymous
February 23, 2006
That's really helpfull, thanks !
The only thing: it doesn't work with an output library project.Anonymous
March 15, 2006
Simon (3 posts up)!
Have u gotten any solution to the 0x80004005 error?
I get the same error.
I got a web-project (C#), put my classes in a class-diagram. When I try to create an instanse of the class I always get the same error:
Object Test Bench
Create Instanse Failed
0x80004005Anonymous
July 26, 2006
I'm getting the same error as well (0x80004005). Anyone found the problem yet?Anonymous
October 10, 2006
I am having the same problem too. Method Invokde Failed (0x80004005). Anyone found the solution?Anonymous
October 18, 2006
I am also getting this exact same method invocation problem for either invoking a static method or trying to create an object instance, in a VB.NET web-project. If you look in the command window after trying to do either of these, you see: _XotbX_000 = BookingEngineUtilities.Test The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. $$delete _XotbX_000 The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. _XotbX_001 = BookingEngineUtilities.Test The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. $$delete _XotbX_001 The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. _XotbX_002 = New Client The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. $$delete _XotbX_002 The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. _XotbX_003 = BookingEngineUtilities.Test The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. $$delete _XotbX_003 The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. _XotbX_004 = BookingEngineUtilities.Test The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. $$delete _XotbX_004 The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. _XotbX_005 = BookingEngineUtilities.Test The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. $$delete _XotbX_005 The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. _XotbX_006 = New Client The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. $$delete _XotbX_006 The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. _XotbX_007 = BookingEngineUtilities.Test The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. $$delete _XotbX_007 The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. _XotbX_008 = BookingEngineUtilities.Test The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. $$delete _XotbX_008 The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. _XotbX_009 = BookingEngineUtilities.Test The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. $$delete _XotbX_009 The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. _XotbX_010 = BookingEngineUtilities.Test The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. $$delete _XotbX_010 The expression cannot be evaluated while in design mode. The expression cannot be evaluated while in design mode. > But I don't know what that means.. How am I in "design mode"? I had all open design and coding windows in Visual Studio closed; even the start page was closed. Just a grey background and the toolbars. Best wishes BenAnonymous
October 22, 2006
I'm having the same problem described above, the 0x80004005 error. I'm on a new install, this works on my laptop without issue. I'm guessing there is a service or permission that needs to be set - would be nice if the error was more detailed than 0x80004005.Anonymous
November 29, 2006
I had the 0x80004005 error too. The problem is with the project file's Debug settings. Right-click the project file, select "Properties". Select the "Debug" tab, and make sure "Start Action" is set to "Start Project". By selecting this, you should be able to select the "Enable the Visual Studio hosting process" checkbox at the bottom of the form. Not having this checkbox checked is causing the error with Object Test Bench.Anonymous
January 07, 2007
The comment has been removedAnonymous
January 27, 2007
PingBack from http://www.megablogsite.com/?p=31Anonymous
January 27, 2007
The comment has been removedAnonymous
January 27, 2007
Microsoft's seeking a patent application for this feature (which appears lifted directly from BlueJ) is creating quite a stir in the educational community. See http://www.bluej.org/mrt/?p=21.Anonymous
January 27, 2007
Perhaps the quality of the tools reflects the skills of the people that are developing them, Fish.Anonymous
January 27, 2007
The comment has been removedAnonymous
January 27, 2007
I can't believe the patent story ... MS is really pathetic sometimesAnonymous
January 28, 2007
Thiefs, filthy little thiefs... http://blogs.zdnet.com/Burnette/Anonymous
January 28, 2007
The comment has been removedAnonymous
January 28, 2007
That innovation is from BlueJ!. It is not right what you do!!Anonymous
January 29, 2007
PingBack from http://www.blog.arun-prabha.com/2007/01/29/true-face-of-microsoft/Anonymous
January 29, 2007
Anyone else noticed that this is a J# app? I wonder whether they even bothered to write it on their own. I'd bet they just copied it wholesale. Any plans to release the source, MS? That is a condition of the GPL.Anonymous
January 29, 2007
PingBack from http://www.xandrix.com.br/blog/2007/01/29/microsoft-alem-de-roubar-a-ideia-patenteia-para-si/Anonymous
January 29, 2007
I need to take a huge dumpy poop on Bloo JaeAnonymous
January 30, 2007
Shame on you. Really shame on you Micro$oft!Anonymous
March 05, 2007
PingBack from http://www.sigs.de/blog/js/?p=27Anonymous
March 15, 2007
PingBack from http://www.bluej.org/mrt/?p=21Anonymous
June 01, 2007
Guess everybody knows it's copied from BlueJ. After C# taken from Java, what else can you expect. And with more and more people moving to open source its gonna be tough to say whether microsoft's late enhancements will be taken well. Ofcourse it's a stable,simple operating system compared to products like Fedora, Ubuntu....but well the time lag in giving things that are already present in Open source systems will move more and more ppl towards Fedora. For example 3d functionality which now came in vista was existing two year's back in Window Managers like Compiz. Even Beryl is much better, with it's cool effects. Anyway dont wanna be too negative to microsoft, but I guess OS will also change with everything being available online. Linux will be more user friendly, combined with it's stability it's gonna be a good platform for normal users. As for devs still windows has nothin to offer. All I see in basic windows is start--Programs--media player. Thats all nothing else.Anonymous
June 08, 2007
Maybe it was taken from BlueJ. But you're wrong on stating that C# is taken from Java. If you know who is the lead architect on C# you would know that its Anders Heljsberg, who is the father of Turbo Pascal, Delphi and Kylix. He was brought to MS to work on J++ and WFC.Anonymous
July 30, 2008
hello i would like to use object test bench for the teaching of the basics of oop. first example i would like to present is classical shapes, but with windows.forms - so i would like to draw the objects in to the canvas. and here is the problem - when i create an instance of form object (canvas), i need to use application.run() method, so it could work. and then i am not able to do anything else - i cannot call any other method, i cannot create any other object. can you please help me? have you any idea, how this could work, so i can could create a form (canvas) and then i could draw on it some shapes?Anonymous
February 26, 2009
hello last time - nobody answered, so maybe now: just a simple question - why i am able to invoke also private methods? if this tool has to be good for teaching the principles of oop, this "feature" should be a bug. or maybe - is it possible to configure somehow OTB not to show private methods? and also - is there a way, how to show properties in OTB?Anonymous
August 16, 2009
The comment has been removedAnonymous
January 21, 2010
The comment has been removedAnonymous
January 27, 2010
GJ - No, it's not possible on a Web app and Object Test Bench will be removed from Visual Studio 2010.