2013-07-07 3 views
0

Unit Testing을 처음 사용했습니다. 단위 테스트는 아래에서 계속됩니다. Student.getCourse, unidergraduate.getCourse1 및 postgraduate.getcourse1이 테스트중인 것과 다른 값을 반환하기 때문에 실패 할 것으로 예상합니다. "학생 코스"<> "학생 코스 1".NUnit이 테스트가 성공적이라고 말했습니다.

Imports NUnit.Framework 
Imports NMock 
Imports StudentCL 

Namespace Test 

    <TestFixture()> 
    Public Class StudentTest 
     Private _mocks As MockFactory 
     Private _StudentMock As Mock(Of Student) 
     Private _GraduateMock As Mock(Of Graduate) 
     Private _UndergraduateMock As Mock(Of UnderGraduate) 

     <SetUp()> 
     Public Sub SetUp() 
      _mocks = New MockFactory() 
      _StudentMock = _mocks.CreateMock(Of Student)() 
      _GraduateMock = _mocks.CreateMock(Of Graduate)() 
      _UndergraduateMock = _mocks.CreateMock(Of UnderGraduate)() 
     End Sub 

     <Test()> 
     Public Sub getStudentCourse() 
      _StudentMock.Expects.One.Method(Function(x) x.getCourse1).WillReturn("Student Course1") 
     End Sub 

     <Test()> 
     Public Sub getGraduateCourse() 
      _GraduateMock.Expects.One.Method(Function(x) x.getCourse1).WillReturn("Graduate Course1") 
     End Sub 

     <Test()> 
     Public Sub getUndergraduateCourse() 
      _UndergraduateMock.Expects.One.Method(Function(x) x.getCourse1).WillReturn("Undergraduate Course1") 
     End Sub 

    End Class 
End Namespace 

Public MustInherit Class Student 
    Public Overridable Function getCourse1() As String 
     Return "Student course" 
    End Function 

End Class 

Public Class Graduate 
    Inherits Student 

    Public Overrides Function getCourse1() As String 
     Return "Graduate course" 
    End Function 

End Class 

Public Class UnderGraduate 
    Inherits Student 

    Public Overrides Function getCourse1() As String 
     Return "Undergraduate course" 
    End Function 

End Class 

무엇이 누락 되었습니까?

답변

3

코드가 실제로 아무 것도 테스트하지 않습니다. 그것은 단순히 mock을 설정하는 것입니다. 그 자체로는 가짜는 쓸모가 없습니다. 작성한 내용에서 getCourse1 함수의 결과를 테스트하려는 것으로 보입니다. 테스트 중 하나의 예는 다음과 같습니다.

<Test()> _ 
Public Sub getCourse1_WhenCalled_ReturnsExpected() 
    ' Arrange 
    Dim student As New Graduate() 

    ' Act 
    Dim course As String = student.getCourse1() 

    ' Assert 
    Assert.That(course, Iz.EqualTo("Graduate Course1")) ' This will fail as you expected. 
End Sub 

시험 방법 이름은 책 단위 테스트의 예술에 기술 된 규칙을 따른다. 시험체는 AAA 패턴으로 알려진 순서로 배열됩니다.

+0

감사합니다. +1. Undergraduate.getCourse1에서 "학부 과정 1"을 반환하는 경우 다음 줄은 테스트를 보장하지 않습니다. "Undergraduate Course1": _UndergraduateMock.Expects.One.Method (Function (x) x.getCourse1) .WillReturn ("학부 과정 1") – w0051977

+0

모의 사용. 모의가 사용되지 않으므로 상태가 확인되지 않았습니다. 또한, 모의 클래스의 실제 인스턴스가 아닙니다. 귀하의 코드는 클래스를 테스트하지 않고 단순히 클래스의 가짜 버전을 생성하고 x.getCource1이 호출되면 "학부생 Cource1"을 반환한다고 말합니다. 'Expects.One'상태를 확인하기 위해 시험이 끝날 때 모의 테스트를 실시해야합니다. 귀하의 경우에는 모의가 필요 없습니다. –

+0

감사합니다. Expects.one.method 란 무엇입니까? 나는 어떤 참고 자료도 찾을 수 없다. – w0051977