Are there any good TDD tools or resources for VB6?
Asked Answered
S

3

15

Yea i know i'm way behind times but what i've got here is a antique VB6 editor app which i believe that no one will be upgrading to .NET soon. It uses a couple of third party DLLs tools and as it's still using the good old RichEdit control i basically can raise my own Bug farm with just this tool alone.

So enough is enough and i'm trying to see if i can use TDD so i can start writing unit test for each behavior/feature that i need to fix, so sooner or later i can have a complete regression test suite for this tool. And even in the future if we do upgrade to .NET i think most of the tests that i've written should be helpful in validating the correct behavior and should be upgradable to a .NET version too, i guess.

Some basic Googling send me to this tool call simplyVBunit, but i can't find enough guides,etc to get me started and yes i'm not that proficient with VB6 either :(

  1. So does anyone know of any good tools/resources for me to use TDD for this VB6 app? [Preferably upgradable to .NET later just in case.]
  2. Or i can actually use those unit test framework for .NET, i.e. NUnit, etc via a workaround?
  3. Or is there's an even more awesome way to get this done?

Thanks :)

EDIT:

I've tried messing with vbunit but i found that there's no easy way to add it to an existing app or at least not to my know how. Thus i've found this to play with too, vb-lite-unit and also this comunit. Plus there's some saying that we can use NUnit with vb6 but there's even less resource on that.

Stickney answered 22/1, 2009 at 1:44 Comment(0)
P
7

VBUnit worked well for me at a former client on a VB6 project.

Peria answered 22/1, 2009 at 1:50 Comment(7)
Thanks for the suggestion, i'm going to try it out :)Stickney
@Jim, is there an easy way to add vbunit an already existing app like the one i've mentioned above? i check the tutorial but to me it seems to that i would have to add pieces of the app bit by bit? thanks.Stickney
@Stickney - I'm not sure what you mean. It has been a while since I have used it, but I don't recall any problems adding it to an existing app. If fact, I started with a project with no unit tests.Peria
@Jim, i followed the tutorial, i can create a new vbtest project just fine. But when i try to add class the vbtestframework and the fixture to my existing project, i can't get vbrunner to work. It claims iSuite as UDF type and can't find it.Stickney
@Stickney I don't know. I never ran into such a problem.Peria
@Jim, actually my app consist of a main exe with plenty of 3rd party dll. how do i setup the test in this case? thanks.Stickney
@melaos: Sorry, I don't know. I didn't run into any problems. The only I know to do is to look at the documentation which I am sure you have. Or if you have purchased the licensed version, contact support.Peria
S
11

I've had very smooth TDD experience using SimplyVBUnit. I thought the sample the code comes with was pretty self-explanatory.

Your initially loaded form at start-up contains the control. Then in the Form_Load sub you:

 AddTest New TestDifferentAsserts

The TestDifferentAsserts is a vb class. It looks something like this:

Public Sub TestFloatCompareTolerance()
   ' we will use the default tolerance of 0.00001
   Assert.AreEqual 9#, 9.000001, "Should be equal!"

   ' The Expected value must be a Double or Single
   ' for the tolerance to be used in the comparison.
   Assert.AreEqual 9, 9.000001, "This will fail because we didn't use a float for the expected value."
End Sub

In fact tomorrow I'm reloading vb6 on my computer to hack around on my computer with simplyvbunit.

[ADDED EDIT]

This is my project Explorer in VB6:

project explorer

Form1 is where the simplyvbunit control is located.

The source code for this project.

If you have third party controls, who cares. Wrap them with a facade. Then create a stub from the facade.

If you need further help, leave a comment.

Stingy answered 22/1, 2009 at 6:36 Comment(5)
Mmm, maybe i was too busy looking around for the best TDD tools that i wasn't really paying attention. I'll go back and revisit this tool then. thanks.Stickney
@Gutzofter, actually my app consist of a main exe with plenty of 3rd party dll. how do i setup the test in this case? thanks.Stickney
+1 I am using it now for weeks, is sometimes buggy but has helped me tremendously.Toughie
@dabblernl - how is it buggy. I've yet to run into any issues. But it would be good to comment it here for other people to have an idea of its weaknesses.Stingy
Bugs I encountered: FixtureTeardown method called after each test. Quitting in the middle of the tests while stepping through the code can lead to ugly error messages, at one time I needed to rebuild the test project to get it to work again.Toughie
P
7

VBUnit worked well for me at a former client on a VB6 project.

Peria answered 22/1, 2009 at 1:50 Comment(7)
Thanks for the suggestion, i'm going to try it out :)Stickney
@Jim, is there an easy way to add vbunit an already existing app like the one i've mentioned above? i check the tutorial but to me it seems to that i would have to add pieces of the app bit by bit? thanks.Stickney
@Stickney - I'm not sure what you mean. It has been a while since I have used it, but I don't recall any problems adding it to an existing app. If fact, I started with a project with no unit tests.Peria
@Jim, i followed the tutorial, i can create a new vbtest project just fine. But when i try to add class the vbtestframework and the fixture to my existing project, i can't get vbrunner to work. It claims iSuite as UDF type and can't find it.Stickney
@Stickney I don't know. I never ran into such a problem.Peria
@Jim, actually my app consist of a main exe with plenty of 3rd party dll. how do i setup the test in this case? thanks.Stickney
@melaos: Sorry, I don't know. I didn't run into any problems. The only I know to do is to look at the documentation which I am sure you have. Or if you have purchased the licensed version, contact support.Peria
S
7

I'm in the situation were we have a huge VB6 application which is on the way to be migrated to .NET. The migrated version is fully unit tested.

The approach we've taken is to unit test the VB6 application from .NET via COM interop. The main advantage we found so far is that VB6 developers end up learning TDD (and all what it implies):

  • Methodology: test first, code afterwards..
  • Architecture: SoC, cohesion, DRY, ...
  • Technology: testing and mocking frameworks, IoC containers...

This solution is improving hugely the code quality of the migrated version as they understand how to architecture things in a way that makes testing easier. Also, there's a potential opportunity to use the same tests on the VB6 and the .NET version.

Not sure if this solution is over-architectured for your problem. You should assess whether or not is applicable or suitable in your situation.

Regards.

Spasm answered 22/1, 2009 at 10:44 Comment(4)
@Benjamin So what tool did you use to do the unit testing? NUnit?Stickney
I've been using MbUnit for two years now and I'm happy with it. I strongly recomend to use MbUnit 2.4. Wait a little bit more before going to version 3; is still buggy.Spasm
It sounds possibly over-the-top for melaos but it's useful info for the rest of us - thanks BenjaminCassius
@Benjamin thanks, @Cassius hehe as long as it's useful, answers away :)Stickney

© 2022 - 2024 — McMap. All rights reserved.