【问题标题】:Unit Testing an MVC Cache using Rhino Mocks, do I need to use HttpContext?使用 Rhino Mocks 对 MVC 缓存进行单元测试,我需要使用 HttpContext 吗?
【发布时间】:2016-06-23 16:21:16
【问题描述】:

我正在尝试为 MVC 缓存创建单元测试。目前,我创建了一个新的 MockRepository(CacheManager 是包装类),我试图弄清楚 Get 函数返回 null 的原因。我的经理提到他认为这与创建模拟 HTTP 上下文有关。

  1. 我是否需要使用模拟 HTTP 上下文来使用 Rhino 对缓存进行单元测试?
  2. 假设 Get 和 Set 实际上按预期工作,我当前的代码是否正确?
  3. 谁能向我解释一下缓存在这个 MVC 上下文中是如何工作的,以便我更好地理解编码?
       // ARRANGE
        MockRepository mocks = new MockRepository();
        CacheManager cache = mocks.Stub<CacheManager>();
        cache.initialize();

        String str = "world";

        // ACT
        cache.Add<String>("hello", str);
        String hi = cache.Get<String>("hello");

        // ASSERT
        Assert.AreEqual(str, hi);

【问题讨论】:

    标签: unit-testing model-view-controller mocking rhino-mocks


    【解决方案1】:
    1. 我是否需要使用模拟 HTTP 上下文来使用 Rhino 对缓存进行单元测试?

    您可能需要模拟 HttpRequestMessage 之类的类,但我认为您还没有达到这一点。

    1. 假设 Get 和 Set 实际上按预期工作,我当前的代码是否正确?

    您想要达到的目标(测试)并不完全清楚。如果您想测试实际的缓存,那将是一个系统测试(添加到缓存中,然后从实际缓存中读取)。但是,您通常只想从依赖项中获取一些输入,以便能够访问您的 sut(被测系统)中的某些代码路径 - 您正在测试的类。

    这是您如何设置缓存模拟以返回特定方法调用的内容:

    CacheManager cache = MockRepository.GenerateMock<CacheManager>();
    cache
        .Stub(x => x.Get(Arg<String>.is.Anything))
        .Return("hello");
    

    你可以用类似的东西来跟进

    cache.AssertWasCalled(x => x.Get<Arg<String>.Matches("abc"));
    

    或类似的东西(或者你可以只使用“期望”而不是“存根”)。

    1. 谁能向我解释一下缓存在这个 MVC 上下文中是如何工作的,以便我更好地理解编码?

    似乎没有关于该缓存的特定 MVC 上下文 - 这可能只是减轻应用程序负载的一种情况,不想为每个请求访问数据库,尤其是对于可能不会改变它的数据经常。您可以将此数据存储在内存/某些第 3 方缓存提供程序中,这将比您的数据库更快地返回。然后,当数据发生更改时,您将使此缓存无效。

    【讨论】:

    • 非常感谢您回答我的问题!是的,这正是我一直在寻找的东西!我的 get 函数在测试时返回 null,所以我一定会尝试这段代码并告诉你它是如何工作的!
    • 我尝试使用该代码,就像 Visual Studio 无法识别任何点或类似的东西。关于为什么会这样的任何想法?
    • 你得到什么样的编译错误?能发个截图吗?
    • 我和我的几个同事交谈过,他们都建议不要尝试对缓存进行单元测试,因为它需要一个外部 HTTP 请求,而尝试模拟它是荒谬的。
    • 您不需要测试缓存,但您可能会遇到需要 存根的情况i> 缓存以便(到达)代码中的测试逻辑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多