我使用moq版本4.0.10827模拟Com对象,当我升级到4.2.1510.2205时,测试执行时出现nonComVisibleBaseClass错误:
[Guid("0339CD56-9BA3-477D-801B-E5F73D37EABE")]
[TypeLibType(4160)]
public interface IDaemonCli
{
// methods & propperties ...
[DispId(1)]
void CloseLog();
....
}
[CoClass(typeof(DaemonCliClass))]
[Guid("0339CD56-9BA3-477D-801B-E5F73D37EABE")]
public interface DaemonCli : IDaemonCli
{
}
[ClassInterface(0)]
[Guid("D94FBC81-06EC-4EAA-B73F-794051487691")]
[TypeLibType(2)]
public class DaemonCliClass : IDaemonCli, DaemonCli
{
// ... definitions of all methods of the com obj
[DispId(1)]
public virtual void CloseLog();
....
}
模拟创建如下:
[TestClass]
[Serializable]
public abstract class Test : IDisposable
{
protected static Mock<DaemonCli> DaemonClientMock { get; private set; }
static Test()
{
Test.DaemonClientMock = new Mock<DaemonCli>();
// here are all the setup on the DaemonClientMock
}
}
模拟在测试代码中注入:
typeof(LoggedServiceBase).GetProperty(
PropertySupport.ExtractPropertyName(() => this.batchClassService.Logger),
BindingFlags.Public | BindingFlags.Instance)
.SetValue(this.batchClassService, Test.DaemonClientMock.Object, null);
当测试类使用mock时会引发异常:
freeMindCom.SetLog(this.Logger);
以前版本的Moq(4.0.10.827)所使用的Castle版本一切都很好,我不确切知道它是哪一个。 任何帮助将不胜感激。
由于