gpt4 book ai didi

c# - 在单元测试中创建 System.Web.Caching.Cache 对象

转载 作者:太空狗 更新时间:2023-10-29 17:47:35 25 4
gpt4 key购买 nike

我正在尝试为没有单元测试的项目中的函数实现单元测试,并且此函数需要 System.Web.Caching.Cache 对象作为参数。我一直在尝试使用诸如...之类的代码来创建此对象

System.Web.Caching.Cache cache = new System.Web.Caching.Cache();
cache.Add(...);

...然后将“缓存”作为参数传入,但 Add() 函数导致 NullReferenceException。到目前为止,我最好的猜测是我无法在单元测试中创建这个缓存​​对象,需要从 HttpContext.Current.Cache 中检索它,我显然无法在单元测试中访问它。

如何对需要 System.Web.Caching.Cache 对象作为参数的函数进行单元测试?

最佳答案

当我遇到这类问题时(有问题的类没有实现接口(interface)),我通常会在有问题的类周围编写一个带有相关接口(interface)的包装器。然后我在我的代码中使用我的包装器。对于单元测试,我手动模拟包装器并将我自己的模拟对象插入其中。

当然,如果模拟框架有效,则改用它。我的经验是,所有模拟框架都存在一些与各种 .NET 类有关的问题。

public interface ICacheWrapper
{
...methods to support
}

public class CacheWrapper : ICacheWrapper
{
private System.Web.Caching.Cache cache;
public CacheWrapper( System.Web.Caching.Cache cache )
{
this.cache = cache;
}

... implement methods using cache ...
}

public class MockCacheWrapper : ICacheWrapper
{
private MockCache cache;
public MockCacheWrapper( MockCache cache )
{
this.cache = cache;
}

... implement methods using mock cache...
}

public class MockCache
{
... implement ways to set mock values and retrieve them...
}

[Test]
public void CachingTest()
{
... set up omitted...

ICacheWrapper wrapper = new MockCacheWrapper( new MockCache() );

CacheManager manager = new CacheManager( wrapper );

manager.Insert(item,value);

Assert.AreEqual( value, manager[item] );
}

真实代码

...

CacheManager manager = new CacheManager( new CacheWrapper( HttpContext.Current.Cache ));

manager.Add(item,value);

...

关于c# - 在单元测试中创建 System.Web.Caching.Cache 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/244280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com