QTP VBScript contains different niceties. This article shows that
1 + 1 doesn't equal
2 sometimes.
Exactly, 1 + 1 doesn't equal 2 sometimes. |
Well, I've prepared this
QTP script:
n1 = InputBox("Enter first number")
n2 = InputBox("Enter second number")
n1increased = n1 + 1
If n1increased = n2 Then
MsgBox n1 & " + 1 equals " & n2
Else
MsgBox n1 & " + 1 doesn't equal " & n2
End If
I will explain it step by step and show all entered data and generated result.
- Read first number from user's input
I enter 1 as a first number:
- Read second number from user's input
I enter 2 as a second number:
- Increase first number by 1
n1increased = n1 + 1
- Check whether first increased number equals to second number
If n1increased = n2 Then
MsgBox n1 & " + 1 equals " & n2
Else
MsgBox n1 & " + 1 doesn't equal " & n2
End If
And the result is:
Do you know why it is so? What is a reason?
The answer is simple. This is due to
converting of VBScript types.
After you read first number (1) from user and assign it (value of course value, not user :) ) to variable, this variable has value of
String type.
So, this is the same like
n1 = "1"When VBScript executes this line:
n1increased = n1 + 1
it sees, that we perform mathematical operation and
converts n1 into number.
Then VBScript calculates
n1 + 1 and the result (
2) has a numeric type - Double (special double-precision floating-point value).
Here is the main point!
2 as Number is not the same as
2 as String. These values have
different type and that's why they differ.
Simple visual example - two apples are not equal to two pears :)
I can demonstrate the above types converting.
I've added this code into our QTP script before if-then-else:
MsgBox "TypeName(n1): " & TypeName(n1)
MsgBox "TypeName(n1increased): " & TypeName(n1increased)
MsgBox "TypeName(n2): " & TypeName(n2)
And its result is:
That's why the value of number variable is not equal to the value of string variable.
Well, How to make that 1 + 1 = 2 ?Answer: Convert string value to number with
CInt function:
If n1increased = CInt(n2) Then
MsgBox n1 & " + 1 equals " & n2
Else
MsgBox n1 & " + 1 doesn't equal " & n2
End If
And the result is:
It works. It works correctly :)
I hope, you will keep in mind this issue with VBScript types converting. It can save your time during debugging of QTP scripts.
Related articles:
Do you like this QTP tutorial? Would you like to receive them in the future?
If yes, please subscribe to this blog RSS feed or by Email. (How to subscribe? VIDEO guide)
Do you know that you are free to use/copy/publish all my materials on your site/blog?