Here is a starter code kata… This is practically nothing in VBA since types get auto-converted, but how might you do this taking a variable of type integer and write a function to convert it to a string type. Here is the code kata requirements along with tests we can use to make sure it does what the kata is expecting at this URL: https://www.codewars.com/kata/5265326f5fda8eb1160004c8
Here is the description of the kata from that URL:
We need a function that can transform a number (integer) into a string.
What ways of achieving this do you know?
Examples (input –> output):
123 --> "123"
999 --> "999"
-100 --> "-100"
Ok, given this basic kata how would you code a function to convert an integer into a string?
So I started with a blank Access database and using the RubberDuckVBA addin (Download available here: https://rubberduckvba.com/) I created a new test module. I added the RubberDuck VBA reference in Tools -> References and added the Compiler Constant in Tools -> ConvertIntegerToString Properties: LateBindTests = 0
And here is my test module with the updates:
'@TestModule '@Folder("Tests") Option Compare Database Option Explicit Option Private Module #Const LateBind = LateBindTests #If LateBind Then Private Assert As Object Private Fakes As Object #Else Private Assert As Rubberduck.AssertClass Private Fakes As Rubberduck.FakesProvider #End If '@ModuleInitialize Private Sub ModuleInitialize() 'this method runs once per module. #If LateBind Then Set Assert = CreateObject( "Rubberduck.AssertClass") Set Fakes = CreateObject( "Rubberduck.FakesProvider") #Else Set Assert = New Rubberduck.AssertClass Set Fakes = New Rubberduck.FakesProvider #End If End Sub '@ModuleCleanup Private Sub ModuleCleanup() 'this method runs once per module. Set Assert = Nothing Set Fakes = Nothing End Sub '@TestInitialize Private Sub TestInitialize() 'This method runs before every test in the module.. End Sub '@TestCleanup Private Sub TestCleanup() 'this method runs after every test in the module. End Sub '@TestMethod("IntegerToString") Private Sub Test123() On Error GoTo TestFail 'Arrange: Dim paramIn As Integer Dim funcOut As String paramIn = 123 'Act: funcOut = IntegerToString(paramIn) 'Assert: Assert.AreEqual "123",funcOut TestExit: '@Ignore UnhandledOnErrorResumeNext On Error Resume Next Exit Sub TestFail: Assert.Fail "Test raised an error: #" & Err.Number & " - " & Err.Description Resume TestExit End Sub '@TestMethod("IntegerToString") Private Sub Test999() On Error GoTo TestFail 'Arrange: Dim paramIn As Integer Dim funcOut As String paramIn = 999 'Act: funcOut = IntegerToString(paramIn) 'Assert: Assert.AreEqual "999",funcOut TestExit: '@Ignore UnhandledOnErrorResumeNext On Error Resume Next Exit Sub TestFail: Assert.Fail "Test raised an error: #" & Err.Number & " - " & Err.Description Resume TestExit End Sub '@TestMethod("IntegerToString") Private Sub TestNegative100() On Error GoTo TestFail 'Arrange: Dim paramIn As Integer Dim funcOut As String paramIn = -100 'Act: funcOut = IntegerToString(paramIn) 'Assert: Assert.AreEqual "-100",funcOut TestExit: '@Ignore UnhandledOnErrorResumeNext On Error Resume Next Exit Sub TestFail: Assert.Fail "Test raised an error: #" & Err.Number & " - " & Err.Description Resume TestExit End Sub
The module is just boiler plate up to the tests themselves where I created three tests to test for the three integer to string conversion conditions of the kata. These tests start at the first line: ‘@TestMethod(“IntegerToString”)
These tests need a public function called IntegerToString to compile so here is a new module I created called KataModule with that function:
Option Compare Database Option Explicit Public Function IntegerToString(intVal As Integer) As String IntegerToString = intVal End Function
And this function passes all the tests. Kata complete!
Here is my database via zip file you can download. Remember, I used RubberDuckVBA to write the tests. Follow my instructions above after installing the add-in by going to the VBE environment (Alt-F11 or Ctrl-G to go to the Immediate Window) and using the Tools menu there.
Trackbacks/Pingbacks