首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >私有访问器类忽略泛型约束

私有访问器类忽略泛型约束
EN

Stack Overflow用户
提问于 2008-09-15 17:13:48
回答 5查看 4.5K关注 0票数 4

这些天,我遇到了一个关于团队系统单元测试的问题。

假设您有以下类:

代码语言:javascript
复制
namespace MyLibrary
{
 public class MyClass
 {
  public Nullable<T> MyMethod<T>(string s) where T : struct
  {
   return (T)Enum.Parse(typeof(T), s, true);
  }
 }
}

如果您想测试MyMethod,可以使用以下测试方法创建一个测试项目:

代码语言:javascript
复制
public enum TestEnum { Item1, Item2, Item3 }

[TestMethod()]
public void MyMethodTest()
{
 MyClass c = new MyClass();
 PrivateObject po = new PrivateObject(c);
 MyClass_Accessor target = new MyClass_Accessor(po);

 // The following line produces the following error:
 // Unit Test Adapter threw exception: GenericArguments[0], 'T', on
 // 'System.Nullable`1[T]' violates the constraint of type parameter 'T'..
 TestEnum? e1 = target.MyMethod<TestEnum>("item2");

 // The following line works great but does not work for testing private methods.
 TestEnum? e2 = c.MyMethod<TestEnum>("item2");
}

运行测试将失败,并显示上述代码片段注释中提到的错误。问题出在Visual Studio创建的访问器类。如果你进入它,你会看到下面的代码:

代码语言:javascript
复制
namespace MyLibrary
{
 [Shadowing("MyLibrary.MyClass")]
 public class MyClass_Accessor : BaseShadow
 {
  protected static PrivateType m_privateType;

  [Shadowing(".ctor@0")]
  public MyClass_Accessor();
  public MyClass_Accessor(PrivateObject __p1);
  public static PrivateType ShadowedType { get; }
  public static MyClass_Accessor AttachShadow(object __p1);

  [Shadowing("MyMethod@1")]
  public T? MyMethod(string s);
 }
}

如您所见,MyMethod方法的泛型类型参数没有约束。

那是个bug吗?这是设计出来的吗?谁知道如何解决这个问题呢?

EN

回答 5

Stack Overflow用户

发布于 2008-09-15 17:23:16

我投票给bug。我不明白这怎么可能是故意的。

票数 3
EN

Stack Overflow用户

发布于 2009-07-28 19:29:48

票数 2
EN

Stack Overflow用户

发布于 2008-10-03 19:18:47

代码语言:javascript
复制
TestEnum? e1 = target.MyMethod("item2");

使用类型推断来确定泛型类型param T。如果可能,请尝试在测试中以不同的方式调用该方法:

代码语言:javascript
复制
TestEnum? e1 = target.MyMethod<TestEnum>("item2");

这可能会产生不同的结果。

希望这能有所帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档