当comq接口

时间:2015-11-13 15:20:05

标签: moq castle-dynamicproxy

我使用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版本一切都很好,我不确切知道它是哪一个。 任何帮助将不胜感激。

由于

0 个答案:

没有答案