절차의 경우 "무언가"는 대개 API 호출 또는 기타 개체 조작과 관련됩니다.
예를 들어, 프로시 저는 파일에 행을 쓸 수 있습니다. 파일 I/O API 호출 (또는 파일 IO 개체)을 사용하여이 "행 쓰기"작업을 수행합니다.
당신이하고 싶은 일은 "mock"개체를 작성하여 파일을 표현하는 것입니다. Mock 객체는 테스트 결과를 수집하여 어설 션에 표시 할 수있는 기능을 제공합니다. 귀하의 모의 물건을 덮어 쓰지 마십시오. 잃어버린 시간의 헛소리입니다.
파이썬에서 우리는 이렇게합니다.
class MockFile(object):
def __init__(self, aFileName, aMode):
self.name= aFileName
self.mode= aMode
self.buffer= None
def write(self, aRow):
self.buffer= str(aRow)
이제 실제 파일 대신이 모의 파일을 절차에 제공 할 수 있습니다. 우리는 일어난 일에 대해 단언 할 수 있습니다.
사례 1 :
public class A
{
public void Foo()
{
Init();
}
protected virtual void Init()
{
Do something;
}
}
[TestFixture]
public class ATests
{
[Test]
public void Foo_test()
{
A aStub = new A_Stub();
aStub.Foo();
Assert.IsTrue(aStub.wasInit);
}
public class A_Stub : A
{
public bool wasInit;
protected override void Init()
{
wasInit = true;
}
}
}
사례 2 :
class TestSomeProcedure(unittest.TestCase):
def testWrite(self):
mockFile= MockFile("name", "w")
theProcedureImTesting(args, args, args, mockFile)
self.assertEquals("The Row It Was Supposed to Write\n", mockFile.buffer)