我正在以一种不会在生产代码中留下“测试钩子(Hook)”的方式寻找一些关于单元测试的建议。
假设我有一个名为 MethodLogger 的静态类(VB.NET 模块),它有一个“void WriteEntry(string Message)”方法,旨在将调用方法和消息写入磁盘上的日志文件。 WriteEntry() 的实际目标可以转移到 IMethodLogger 的假实现以运行单元测试和 全部 其他情况它应该调用 IMethodLogger 的真正实现。
以下是我到目前为止所做的一个粗略的处理,我喜欢这种方法——但在一些快速测试中,它会引发一些问题和疑虑:
[InternalAttributesVisibleTo("MethodLogger.Tests")]
internal static class MethodLogger
{
public void WriteEntry(string message)
{
LogWriter.WriteEntry(message);
}
private IMethodLogger LogWriter
{
get;
set;
}
#if DEBUG
internal void SetLogWriter(IMethodLogger logger)
{
LogWriter = logger;
}
#endif
}
这是我的具体问题:
请您参考如下方法:
您可以使用 Typemock Isolator 来规避任何损害可测试性的设计问题。
与其他框架不同,它还可以使用静态方法、私有(private)方法和非虚拟方法。
当您学习更好的设计时,默认情况下您的代码将更加“可测试”,
但是,如果您现在只想解决这些问题,这将有所帮助
http://blog.typemock.com/2009/01/isolator-new-vbnet-friendly-api.html
(此外,它是唯一具有 VB 友好 API 的工具)




