stub常用于虚拟接口、类、方法,无法重写静态方法(stub需要传递到具体调用代码中)

shim常用于重写静态方法(在ShimsContext.Create()作用域内,拦截Runtime动态修改方法的实现,静态方法无需传递)

shim如果用于重写非静态方法,依然需要传递

以下两种的目的都是虚拟TokenHandler.GetToken这个方法

stub:

            var stubTokenHandler = new StubTokenHandler<Token>("user")
{
GetToken = () => { return new Token() { UserId = }; }
};

shim:(可以和stub一样直接修改GetToken方法,但就无法达到全局调用的目的;下面的例子里是通过Factory静态方法调用,虚拟整个类的实现以达到全局可调用的目的)

            using (ShimsContext.Create())
{
ShimTokenFactory.TokenHandler = () =>
{
return new TokenHandlerDefine(1);
};
}
    public class TokenHandlerDefine : TokenHandler<Token>
{
private int userId;
public TokenHandlerDefine(int userId)
{
this.userId = userId;
} public override Token GetToken()
{
return new Token() { UserId = userId };
}
}
    public class TokenFactory
{
public static TokenHandler<Token> TokenHandler()
{
return new TokenHandler<Token>("user");
}
}

最新文章

  1. 浅谈linux 下,利用Nginx服务器代理实现ajax跨域请求。
  2. Linux学习笔记(5)-hello world
  3. IP首部校验和的计算
  4. chrome开发总结(交互/权限/存储)-爬虫
  5. plain framework 1 参考手册 入门指引之 简明教程
  6. Android中this、super的区别
  7. Codeforces Round #367 (Div. 2) D. Vasiliy&#39;s Multiset(可持久化Trie)
  8. python迭代器与生成器
  9. EXTJS 密码确认与验证
  10. 用Ant实现Java项目的自动构建和部署(转)
  11. 深入研究Java类加载机制
  12. C++ Primer 学习笔记_95_用于大型程序的工具 --多重继承与虚继承
  13. 字符串(后缀自动机):COGS 2399. 循环同构
  14. VK Cup 2015 - Round 1 -E. Rooks and Rectangles 线段树最值+扫描线
  15. 使用ImageView
  16. &lt;META http-equiv=Content-Type content=&quot;text/html; charset=gb2312&quot;&gt;
  17. IntelliJ Idea + Maven + Junit
  18. thinkphp5 行为(钩子)扩展
  19. 2018-2019 2 20165203 《网络对抗技术》Exp5 MSF基础
  20. 吴裕雄 python深度学习与实践(5)

热门文章

  1. Go 语言解释器 Yaegi
  2. hive表的DDL
  3. tinymce编辑器从word粘贴公式
  4. linux系列(十四):head命令
  5. centos7 安装python3.7.1
  6. 小程序web-view的使用,跳转到外部链接~
  7. 走进JavaWeb技术世界14:通过项目逐步深入了解Mybatis(一)
  8. 图片上传利用request.getInputStream()获取文件流时遇到的问题
  9. Linux内存使用情况以及内存泄露情况
  10. Apache RocketMQ 的过去、现在和未来 原创: DataPipeline DataPipeline数见科技 前天