我在HasContentPermission
上创建了一个名为System.Security.Principal.IIdentity
的扩展方法:
namespace System.Security.Principal
{
public static class IdentityExtensions
{
public static bool HasContentPermission
(this IIdentity identity, int contentID)
{
// I do stuff here
return result;
}
}
}
我称之为:
bool hasPermission = User.Identity.HasPermission(contentID);
像魅力一样工作。现在我想对它进行单元测试。要做到这一点,我真正需要做的就是直接调用扩展方法,所以:
using System.Security.Principal;
namespace MyUnitTests
{
[TestMethod]
public void HasContentPermission_PermissionRecordExists_ReturnsTrue()
{
IIdentity identity;
bool result = identity.HasContentPermission(...
但HasContentPermission
不会智能感知。我尝试创建一个继承自IIdentity
的存根类,但这也不起作用。为什么呢?
或者我是以错误的方式解决这个问题?
答案 0 :(得分:15)
确保你已经:
this
using mypackage;
请注意,您的示例中还有(我假设)一个拼写错误,因为该方法不在类中。
最后,我会避免将方法放入官方的.NET命名空间。对于那些可能会认为该方法是官方支持的方法的人来说,实际上它是您自己的并且包含在您的项目中时,它只会让您感到困惑。
答案 1 :(得分:3)
我怀疑它与您向现有System.Security.Principal
命名空间添加扩展方法这一事实有关。确保引用定义扩展方法的项目,或者使用不同的命名空间进行尝试。
答案 2 :(得分:2)
扩展方法应该在静态类中。你的静态课在哪里?你的代码是否编译?
答案 3 :(得分:0)
我几乎找不到有关VB.NET单元测试的文档。我不得不通过反复试验发现,默认情况下,VB.NET中的扩展方法仅在当前程序集中有效。这是因为VB.NET中的静态类是“模块”,并且“模块”作用域默认为“朋友”(内部)。
如果要在单元测试项目中引用的项目中对扩展方法进行单元测试,请使用“公共模块”。