VS 2010单元测试向导自动生成的类访问器未编译

时间:2014-09-08 11:05:32

标签: c# visual-studio unit-testing interface

考虑使用类库项目的 VS 2010 解决方案,我们将其命名为ClassLibrary。在这个项目中,我们有以下类型:

namespace ClassLibrary
{
    public interface IFooable<T> where T : struct
    {
       T Foo(T value);
    }

    public struct Blah : IFooable<Blah>
    {
       public static Blah Foo(Blah blah1, Blah blah2)
       {
          throw new NotImplementedException();
       }

       Blah IFooable<Blah>.Foo(Blah value)
       {
           return Blah.Foo(this, value);
       }

       private void ForceBlahAccessorCreation()
       {
           throw new NotImplementedException();
       }
   }

}

现在我还在解决方案中添加测试项目,我正在使用测试向导为我的单元测试创​​建一些管道。在这个管道中,向导创建了一个有用的Blah_Accessor类型,它允许我访问Blah的私有静态和实例方法,字段,属性等,这非常方便。

问题是,使用上面显示的代码,当我尝试构建测试项目时,我将得到以下编译时错误:

  

来自程序集'ClassLibrary_Accessor的类型'ClassLibrary.Blah_Accessor'中的方法'Foo',Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null'没有实现。

咦?

有人可以告诉我这个问题是否会在他们的VS 2010或任何其他VS版本中重现,以及为什么会发生这种情况?

更新:好的,我的印象是,使用静态方法和明确实现的具有相同名称(Foo)的接口方法可能是问题,但这不是案子。即使它只是明确实现的IFooable.Foo方法,我也会收到错误。

更令人困惑的是,如果我选择从.NET Framework明确实现接口,我就不会收到任何错误:

public struct Blah : IEquatable<Blah>
{
    public static bool Equals(Blah blah1, Blah blah2)
    {
        throw new NotImplementedException();
    }

    private void ForceBlahAccessorCreation()
    {
        throw new NotImplementedException();
    }

    bool IEquatable<Blah>.Equals(Blah other)
    {
        throw new NotImplementedException();
    }
} //THE SOLUTION WILL COMPILE FINE

public struct Blah : IFooable<Blah>
{
    Blah IFooable<Blah>.Foo(Blah value)
    {
        return Blah.Foo(this, value);
    }

    private void ForceBlahAccessorCreation()
    {
        throw new NotImplementedException();
    }
} //TEST PROJECT WILL FAIL TO COMPILE 

0 个答案:

没有答案