2013-07-07 3 views
0

Я новичок в тестировании модулей. Тестирование устройств выполняется ниже. Я ожидаю, что они потерпят неудачу, потому что 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

Ваш код на самом деле ничего не тестирует. Это просто настраивает насмешек. Сами по себе издевательства бесполезны. Из того, что вы написали, кажется, вы хотите проверить результат функции 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. Не проверяет ли следующая строка, если Subgraduate.getCourse1 возвращает: «Бакалавриат Course1»: _UndergraduateMock.Expects.One.Method (Function (x) x.getCourse1) .WillReturn («Бакалавриат 1») – w0051977

+0

Это применимо только в том случае, если макет используется. Макет никогда не используется, поэтому условие никогда не проверялось. Кроме того, макет не является фактическим экземпляром вашего класса. Ваш код не тестирует ваш класс, он просто создает фальшивую версию вашего класса и говорит, что если вызывается x.getCource1, верните «Undergraduate Cource1». Макет должен быть проверен в конце теста, чтобы проверить состояние «Ожидание.Один». В вашем случае нет необходимости в издевательствах. –

+0

Спасибо. Для чего используется Expects.one.method? Я не могу найти какой-либо справочный материал. – w0051977

Смежные вопросы