我有以下(遗留的,继承自前辈)VB.Net(框架2.0)类和方法,它们在异常上创建系统事件日志:
Public Interface IMyClass
Function MyMethod(ByVal aValue As String) As Date
End Interface
Public Class MyClass
Implements IMyClass
Public Function MyMethod(ByVal aValue As String) As Date Implements IMyClass.MyMethod
Try
' Calculate return date based on aValue
Catch ex As Exception
Call MyUtilityClass.LogError("MyClass", "MyMethod", ex)
Throw
End Try
End Function
End Class
Partial Public NotInheritable Class MyUtilityClass
Public Shared Sub LogError(ByVal className As String,
ByVal methodName As String,
ByVal ex As Exception)
' Write details to Event Log
End Sub
End Class
我正在尝试在 C#(框架 4.5)单元测试项目中对此进行测试,并且部分逻辑要求是aValue
用逗号分隔的两个数字 - 如果不是,则抛出异常和事件日志。
我设置了以下单元测试以确保正确抛出异常:
[TestClass]
public class MyClassUnitTest
{
private readonly StubMyClass myClass = new StubMyClass();
[TestMethod]
[ExpectedException(typeof(InvalidCastException))]
public void TestMyMethodInvalidMissingNumber()
{
this.myClass.MyMethod("0,");
}
}
这一切都很好,测试通过了,因为逻辑MyMethod
导致了预期的异常。但是,我不希望写入事件日志。那么,我如何 ShimMyUtitlityClass
来拦截呼叫LogError
而不做任何事情呢?
我见过的所有 Fakes 示例都是针对返回假值的方法(并且都是用C# 编写的!)当我尝试实现这样的模式时,它会给出一个错误,即 LogError 没有 getter。