代码之家  ›  专栏  ›  技术社区  ›  Jez

如何使用私有返回类型测试私有方法?

  •  -2
  • Jez  · 技术社区  · 6 年前

    我在用 PrivateObject 在我的一个类中测试私有方法( 请不要讲授不测试私人方法。我已经选择去做了。 )然后你可以使用 Assert.AreEqual() 要测试私有方法的返回值…如果返回值是基本的内置类型。但是,如果我的私有方法返回的值本身是私有结构呢?

    [TestMethod]
    public void TestPrivateMethod1() {
        using (Interactors.Interactor interactor = new Interactors.Interactor()) {
            var priv = new PrivateObject(interactor);
            var privateType = priv.Invoke("myPrivateMethod", "foo");
            Assert.AreEqual(12, privateType.SomeValue);
        }
    }
    

    在这种情况下,私有结构是在 Interactors.Interactor 类,并返回到变量中 privateType . 但是由于测试方法不知道,我显然不能用 privateType.SomeValue 在里面。如何测试该私有返回类型的值?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Kevin Gosse    6 年前

    PrivateObject 使用反射操作私有类型。只需使用它来检索您的值:

    Assert.AreEqual(12, new PrivateObject(privateType).GetFieldOrProperty("SomeValue"));
    

    不过,这很冗长。我很惊讶没有包装利用 dynamic 关键字。