gpt4 book ai didi

c# - 使用包含协变类型的项目的访问器在单元测试项目中构建失败

转载 作者:可可西里 更新时间:2023-11-01 07:56:36 26 4
gpt4 key购买 nike

我为我们的项目添加了一个协变接口(interface):

interface IView
{
}

interface IPresenter<out TView> where TView : IView
{
TView View { get; }
}

我创建了一些类,实现了这些接口(interface):

class TestView : IView
{
}

class TestPresenter : IPresenter<TestView>
{
public TestView View
{
get { return something; }
}

private void DoSomething()
{
}
}

我可以毫无问题地使用它:

IPresenter<IView> presenter = new TestPresenter();

所以一切似乎都是正确的,所以我假设我的协方差用法是正确的。不幸的是,我们的单元测试项目包含来自位于同一项目中的某些类型的私有(private)访问器,例如协变接口(interface),这会导致构建失败。

Could not load type 'GenericInheritanceTest.IPresenter_Impl`1' from assembly 'GenericInheritanceTest_Accessor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' because it declares a covariant or contravariant type parameter and is not an interface or delegate.

这里到底有什么问题?我的实现是否失败?如何解决这个问题?不可能,我们一使用协变类型就必须避免访问器???是否可以阻止为某些类型创建访问器来解决这个问题?

最佳答案

这是 Visual Studio 2010 中的错误。已报告给 Microsoft Connect但已经关闭,显然不会修复。

根据 Bruce Taimana 开发的博客条目 the private accessor feature已停止并可能在未来版本的 Visual Studio 中删除。列出的可能替代方案是:

  1. Use the Microsoft.VisualStudio.TestTools.UnitTesting.PrivateObject class to assist in accessing internal and private APIs in your code. This is found in the Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll assembly.

  2. Create a reflection framework that would be able to reflect off your code to access internal or private APIs.

  3. If the code you are trying to access is internal, you may be able to access your APIs using the InternalsVisibleToAttribute so your test code can have access to the internal APIs.

关于c# - 使用包含协变类型的项目的访问器在单元测试项目中构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3666220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com