TDD应该具有100%的代码覆盖率。这是否意味着应该为属性getter和setter以及其他不包含实际逻辑的方法编写测试,例如处理外部API功能?
Example 1:
下面是一个示例方法(恰好也是另一个SO问题,如果我们要测试它,它涉及如何最好地测试它)。这个方法没有多大作用。它是停止服务的System.ServiceProcess.ServiceController
功能的一个门面。目前,这个代码不是用TDD编写的,但如果是,它会是应该测试的吗?这里几乎没有逻辑这本身不会有那么大帮助。
仅供参考:如果您想回答如何最好地测试它(IoC&;适配器模式与Detouring),请参阅另一个SO问题。
Public Function StopService(ByVal serviceName As String, ByVal timeoutMilliseconds As Double) As Boolean Implements IWindowsServicesService.StopService
Try
Dim service As New ServiceController(serviceName)
Dim timeout As TimeSpan = TimeSpan.FromMilliseconds(timeoutMilliseconds)
service.[Stop]()
If timeoutMilliseconds <= 0 Then
service.WaitForStatus(ServiceControllerStatus.Stopped)
Else
service.WaitForStatus(ServiceControllerStatus.Stopped, timeout)
End If
Return service.Status = ServiceControllerStatus.Stopped
Catch ex As Win32Exception
Return False
Catch ex As TimeoutException
Return False
End Try
End Function
Example 2:
如果有人认为代码仍然有一些逻辑,因此在进行TDD时需要对其进行测试,那么下面有没有逻辑的代码呢
Public Function GetProcess(ByVal serviceName As String) As Process
Dim managementObject As New ManagementObject(String.Format("Win32_service.Name= {0} ", serviceName))
Dim processID As Integer = CType(managementObject.GetPropertyValue("ProcessID"), Integer)
Dim process As Process = process.GetProcessById(processID)
Return process
End Function