Vb.net 努尼特说测试成功了

Vb.net 努尼特说测试成功了,vb.net,unit-testing,mocking,nunit,nmock,Vb.net,Unit Testing,Mocking,Nunit,Nmock,我不熟悉单元测试。单元测试在以下方面取得了成功。我预计他们会失败,因为Student.getCourse、unidergraduate.getCourse1和graduate.getCourse1返回的值与正在测试的值不同,例如“学生课程”“学生课程1” 导入NUnit.Framework 导入NMock 进口学生 名称空间测试 公开课学生测验 私人模拟工厂 二等兵(学生)模拟为模拟(学生) 私立大学毕业生模拟为模拟(毕业生) 私立大学本科生模拟为模拟(本科生) 公共子设置() _mocks=新

我不熟悉单元测试。单元测试在以下方面取得了成功。我预计他们会失败,因为Student.getCourse、unidergraduate.getCourse1和graduate.getCourse1返回的值与正在测试的值不同,例如“学生课程”“学生课程1”

导入NUnit.Framework
导入NMock
进口学生
名称空间测试
公开课学生测验
私人模拟工厂
二等兵(学生)模拟为模拟(学生)
私立大学毕业生模拟为模拟(毕业生)
私立大学本科生模拟为模拟(本科生)
公共子设置()
_mocks=新的MockFactory()
_StudentMock=\u mocks.CreateMock(学生的)()
_GraduateMock=\u mocks.CreateMock(毕业生的)()
_本科生模拟=_mocks.CreateMock(本科生的)()
端接头
公共分科学生课程()
_StudentMock.Expects.One.Method(函数(x)x.getCourse1).WillReturn(“Student Course1”)
端接头
公共副研究生课程()
_GraduateMock.Expects.One.Method(函数(x)x.getCourse1).WillReturn(“GraduateCourse1”)
端接头
公共本科附属课程()
_本科生mock.Expects.One.Method(函数(x)x.getCourse1).WillReturn(“本科课程1”)
端接头
末级
结束命名空间
公营班级学生
作为字符串的公共可重写函数getCourse1()
返回“学生课程”
端函数
末级
公办班毕业生
继承学生
公共重写函数getCourse1()作为字符串
返回“研究生课程”
端函数
末级
公办本科
继承学生
公共重写函数getCourse1()作为字符串
返回“本科”
端函数
末级

我遗漏了什么?

您的代码实际上没有测试任何东西。它只是建立模拟。嘲笑本身是无用的。从您所写的内容来看,您似乎想要测试
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
_
公共子课程1\u调用时\u返回预期()
“安排
作为新毕业生的Dim学生()
“行动
将课程设置为字符串=student.getCourse1()
“断言
断言(当然,Iz.EqualTo(“研究生课程1”)“这会像你预期的那样失败。
端接头

测试方法名称遵循《单元测试的艺术》一书中描述的约定。测试主体按AAA模式的顺序排列。

您的代码实际上没有测试任何东西。它只是建立模拟。嘲笑本身是无用的。从您所写的内容来看,您似乎想要测试
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
_
公共子课程1\u调用时\u返回预期()
“安排
作为新毕业生的Dim学生()
“行动
将课程设置为字符串=student.getCourse1()
“断言
断言(当然,Iz.EqualTo(“研究生课程1”)“这会像你预期的那样失败。
端接头

测试方法名称遵循《单元测试的艺术》一书中描述的约定。测试主体按AAA模式的顺序排列。

谢谢+1。下一行是否确保test if industrial.getCourse1返回:“industrial Course1”:_undervademock.expected.One.Method(函数(x)x.getCourse1)。将返回(“industrial Course1”),该返回仅在使用mock时适用。模拟从未使用过,因此从未验证过条件。此外,mock不是类的实际实例。你的代码不是在测试你的类,它只是在创建一个假版本的类,并说如果调用了x.getCource1,那么返回“本科Cource1”。必须在测试结束时验证模拟,以检查“Expects.One”条件。在你的情况下,没有必要模仿。谢谢。expected.one.method用于什么?我找不到任何参考资料。我不使用NMock。然而,我认为它的工作原理与其他模拟框架类似。它设置了一个对“getCourse1”的预期调用,该调用在某个其他对象调用时发生。在测试结束时,将验证模拟以确保发生了一个调用。因此,在您的测试中,模拟被设置为由使用Student类的对象使用,并测试它是否正确使用了您的Student类,而不是测试您的Student类本身。您能否提供一个如何使用的示例:expects.one.method.willreturn using my class?然后我将能够标记这个答案。再次感谢,谢谢。下一行是否确保test if industrial.getCourse1返回:“industrial Course1”:_undervademock.expected.One.Method(函数(x)x.getCourse1)。将返回(“industrial Course1”),该返回仅在使用mock时适用。模拟从未使用过,因此从未验证过条件。此外,mock不是类的实际实例。你的代码不是在测试你的类,它只是在创建一个假版本的类,并说如果调用了x.getCource1,那么返回“本科Cource1”。必须在测试结束时验证模拟,以检查“Expects.One”条件。在你的情况下,没有必要模仿。谢谢。expected.one.method用于什么?我找不到任何参考资料。我不使用NMock。然而,我认为它的工作原理与其他模拟框架类似。它设置了一个对“getCourse1”的预期调用,该调用在某个其他对象调用时发生。在测试结束时,将验证模拟以确保发生了一个调用。因此,在您的测试中,模拟被设置为由使用Student类的对象使用,并测试它是否正确使用了您的Student类,而不是测试您的Student类本身