Day 046 - Method overloading and testing issues

Day 046 - Method overloading and testing issues

As you'll recall from yesterday, I had a class like this:

MyClass is class END PROCEDURE Constructor() PROCEDURE Destructor() PROCEDURE MethodA(intValue is int) RESULT intValue PROCEDURE MethodA(strValue is string) RESULT strValue PROCEDURE MethodB(value) RESULT value

and I was doing some unit testing. Specifically, I wanted to explore procedure overloading. And to that end I decided to try passing a string to MethodA to verify that overloading works as I expect. 

But I had a problem. The unit test interface only showed me options for the int syntax. I tried entering a string, with or without quotes, and although the entry value was accepted, after I ran the test the parameter and the expected result had both been set to 0. 

But there is a solution for testing overloaded methods. Over on the right side there's a button to edit the parameters. 

On the edit parameters window I set the input and control parameters to <automatic>. 

I was then able to pass in either a string or a numeric value. I verified that the appropriate method was called with some debug statements. (I could just as easily have set a return value based on which method was called, but I've often used OutputDebugString when debugging complex processing, and it's a nice feature to have.)

To recap, parameters can be of automatic type (determined at runtime) or they can have a defined type. And you can overload methods. But what if you have a method that takes an automatic type? Can you overload it with a syntax for a specific type? 

Here are my two methods:

PROCEDURE MethodB(value) Debug("automatic syntax used for value " + value) RESULT value PROCEDURE MethodB(value is int) Debug("int syntax used for value " + value) RESULT value

I ran the test twice, once with a string and once with an int. Here's the trace output:

[3444] automatic syntax used for value abc [3444] int syntax used for value 35

I really didn't expect that to work, but it did! 

Besides parameters, return value types can, apparently, also be determined at runtime. I wrote the following code:

PROCEDURE MethodC(nParam is int) nValue is int sValue is string nValue = 12 sValue = "abc" IF nParam = 1 THEN RESULT nValue END RESULT sValue

and set up a test case. But I was unable to run the test, and I also found that I could no longer run the MethodA test. I fiddled around with this for a while, but no joy. 

I'll take another kick at the unrunnable tests tomorrow.