【问题标题】:Testing Mocked object constructor测试模拟对象构造函数
【发布时间】:2011-01-08 13:08:00
【问题描述】:

我正在尝试测试一个在初始化时采用 int 的对象“SqlGymSessionRepository”。如果没有提供参数,我希望它抛出错误。我不知道这应该如何工作。我有这样的事情:

[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void Throw_Exception_If_Not_Session_Id()
{
    var mockRepos = new Mock<SqlGymSessionRepository>();
}

我不确定应该在哪里测试构造函数?

【问题讨论】:

    标签: c# .net unit-testing mocking moq


    【解决方案1】:

    您不想模拟您正在测试的类(实现)。你想模拟一个类的依赖。如果您正在测试SqlGymSessionRepository,那么您不需要模拟它,而是需要它的实现。模拟适用于 SqlGymSessionRepository 所依赖的任何其他类,然后您将其提供给它以进行测试。

    直接调用构造函数。

    【讨论】:

      【解决方案2】:

      如果要测试构造函数,调用它:

      new SqlGymSessionRepository(null);
      

      更新每个 cmets:

      您说它需要一个可为空的 int。然后编译器将确保它总是被null 或整数值调用。如果null 是一个无效的初始化有效,你的代码应该抛出一个异常并且你可以测试它。您不需要测试该方法是否在没有参数的情况下被调用。 C# 是静态类型的,因此除非为所有必需的参数提供值,否则代码不会编译。

      【讨论】:

      • 问题是因为该对象需要一个 int,我无法使用 null 创建它,因此测试了 excpetion,因为存在编译时错误?
      • 构造函数中的代码是什么样子的?如果构造函数采用 int,则不能传入 null,因此无需对此进行测试。如果它需要 int?,您可以传入 null 并对其进行测试。
      • 它只需要没有可为空的 int。我担心它可以在没有 int 的情况下被调用。这种情况下,与其写异常,不如让它抛出系统错误?
      • 如果 null 是一个无效的初始化有效,你的代码应该抛出一个异常,你可以测试它。 - 这就是我想要达到的目标。我该怎么做?如果我添加 null 那么它不会编译进行测试。
      【解决方案3】:
      new SqlGymSessionRepository(null);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-29
        • 1970-01-01
        • 2017-05-01
        • 1970-01-01
        • 2016-11-19
        相关资源
        最近更新 更多