动态分配的单元测试属性

时间:2011-05-22 06:53:57

标签: .net visual-studio unit-testing

单元测试&动态noob在这里...

我意识到这不是解析JSON的最佳方法。我只是试图围绕动力学以及如何为它们添加测试。

我正在使用此anwserquestion帮助JSON解析JSON反序列化到C#动态对象。

以下是一个示例JSON字符串:

string jsonText = "{ name: \"Google\", uri: \"http://www.google.com\" }";

假设我有一个名为Site的类,它有一个名称和uri属性,我想用我从上面的JSON字符串反序列化的动态数据实例化它:

dynamic data = jss.Deserialize(jsonText, typeof(object)) as dynamic;

var account = new Site{
    name = data.sid,
    uri = data.uri
};

这会将'string'上的运行时绑定程序异常抛出到'System.Uri'。

我认为这是学习单元测试的好机会(一直想要)。我会写这个测试,确认失败,然后让它工作。这是测试:

[TestMethod()]
public void UriDynamicTest()
{
    Site target = new Site();
    dynamic uri = "http://www.google.com";
    var expected = uri;
    Uri actual;

    target.uri = expected;
    actual = target.uri;

    Assert.AreEqual(expected, actual);
}

这就是我被困住的地方。测试按预期编译,无法按预期运行。我的下一个合乎逻辑的反应是写一个说是的测试,如果你给我一个Uri的字符串,我会失败:

[TestMethod()]
[ExpectedException(typeof(RuntimeBinderException), "Cannot implicitly convert type 'string' to 'System.Uri'")]
public void UriThrowsExceptionIfInvalidData()
{
    Site target = new Site();
    dynamic uri = "http://www.google.com";

    var expected = uri;
    Uri actual;

    target.uri = expected;
    actual = target.uri;

    Assert.AreEqual(expected, actual);
}

但是现在我所做的就是验证我已经知道的东西。我不确定这对我有什么帮助,因为测试通过了。我正在寻找那个让我重新编写代码以进行某种类型检查的时刻,以确保我要设置的Uri是一个Uri。我确信在我编写类型检查代码并问自己为什么要使用动力学时,还会有另一个时刻到来?

我正在寻找一种正确的方法来测试我的Site.Uri在通过Uri时是否满意,并且当它没有通过Uri时不高兴。

1 个答案:

答案 0 :(得分:1)

  

我正在寻找合适的测试方法   我的Site.Uri很开心   通过了一个Uri,当它没有时就不开心了   没有通过Uri。

您刚回答了自己的问题..编写一个测试,测试它是否按预期失败(正如您所做的那样),并且第二个测试它的测试将在给定正确类型时按预期工作。

[TestMethod()]
public void UriDynamicTestWorksWithCorrectParameter()
{
    Site target = new Site();
    dynamic uri = new Uri("http://www.google.com"); // note: correct type created here
    var expected = uri;
    Uri actual;

    target.uri = expected;
    actual = target.uri;

    Assert.AreEqual(expected, actual);
}

您确定dynamic是您需要的,为什么不只是var

在你的代码中,uri参数不是动态的(它只是一个字符串),data是动态变量。因此,您正在测试代码的错误部分可以处理成为动态变量。

相关问题