UnitTest メソッドのテストの追加
Humanクラスに名前を取得するgetFirstNameメソッドと苗字を取得するgetFamilyNameメソッドを追加します。前提としては、名前と苗字は、半角のスペースで区切られているとします。
Class Sample.Human Extends %RegisteredObject [ ProcedureBlock ]
{
Property height As %Integer;
Property name As %String;
Method getFamilyName() As %String
{
if (..name = "")
{
quit ""
}
else
{
set pos = $FIND(..name," ")
if (pos = 0)
{
quit ..name
}
else
{
quit $EXTRACT(..name,pos,$LENGTH(..name))
}
}
}
Method getFirstName() As %String
{
if (..name = "")
{
quit ""
}
else
{
set pos = $FIND(..name," ")
if (pos = 0)
{
quit ..name
}
else
{
quit $EXTRACT(..name,1,pos-2)
}
}
}
}
そのテスト仕様も変更して以下のようにしました。
Include %outUnitTest
/// Unit Test for Human Class
Class Sample.FirstUnitTest Extends %UnitTest.TestCase [ ProcedureBlock ]
{
Method TestGetFamilyName()
{
set p = ##class(Sample.Human).%New()
set familyName = p.getFamilyName()
DO $$$AssertEquals(familyName,"","My first name is nothing")
set p.name = "Taro Yamada"
set familyName = p.getFamilyName()
DO $$$AssertEquals(familyName,"Yamada","My family name is "_familyName)
}
Method TestConstructor()
{
set p = ##class(Sample.Human).%New()
set p.name = "Taro Yamada"
set p.height = 180
DO $$$AssertEquals(p.name,"Taro Yamada","My name is "_p.name)
DO $$$AssertEquals(p.height,180,"My height is "_p.height)
}
Method TestGetFirstName()
{
set p = ##class(Sample.Human).%New()
set firstName = p.getFirstName()
DO $$$AssertEquals(firstName,"","My first name is nothing")
set p.name = "Taro Yamada"
set firstName = p.getFirstName()
DO $$$AssertEquals(firstName,"Taro","My first name is "_firstName)
}
}
このテスト結果は、以下の様にパスです。
USER>do ##class(%UnitTest.Manager).RunTest ("Human:Sample.FirstUnitTest","/load=0/recursive=0/nodebug")
===============================================================================
Directory: c:\cache\unittests\human\
===============================================================================
Human begins ...
Skipping loading testsuite Human
Sample.FirstUnitTest begins ...
TestConstructor() begins ...
AssertEquals:My name is Taro Yamada (passed)
AssertEquals:My height is 180 (passed)
LogMessage:Duration of execution: .002379 sec.
TestConstructor passed
TestGetFamilyName() begins ...
AssertEquals:My first name is nothing (passed)
AssertEquals:My family name is Yamada (passed)
LogMessage:Duration of execution: .002858 sec.
TestGetFamilyName passed
TestGetFirstName() begins ...
AssertEquals:My first name is nothing (passed)
AssertEquals:My first name is Taro (passed)
LogMessage:Duration of execution: .002835 sec.
TestGetFirstName passed
Sample.FirstUnitTest passed
Human passed
Use the following URL to view the result:
http://127.0.0.1:1972/csp/samples/%UnitTest.Report.cls?NS=USER&INDEX=45
USER>
では、これでは、このFirstUnitTestクラスは問題ないのでしょうか?