Fakes里的stub和shim的区别

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 };
        }
    }

猜你喜欢

转载自www.cnblogs.com/yeagen/p/11718813.html