stub是用于虚拟接口、类、方法(stub需要传递到具体调用代码中)
shim是用于重写接口、类、方法或静态方法(在ShimsContext.Create()作用域内,拦截Runtime直接修改方法的实现,无需传递)
以下两种的目的都是虚拟TokenHandler.GetToken这个方法
stub:
var stubTokenHandler = new StubTokenHandler<Token>("user") { GetToken01 = () => { return new Token() { UserId = 1 }; } };
shim:
using (ShimsContext.Create()) { ShimTokenFactory.TokenHandler = () => { return new TokenHandlerDefine(user.Id); }; }
public class TokenHandlerDefine : TokenHandler<Token> { private int userId; public TokenHandlerDefine(int userId) { this.userId = userId; } public override Token GetToken() { return new Token() { UserId = userId }; } }