-1

据我所知,单元测试用于测试相关功能是否按预期工作。我想知道,这是否仅通过检查函数的返回值来完成?

除此之外,单元测试是否以不同的方式使用?如果是这样,请你展示一下如何。

4

2 回答 2

1

您(可以)不仅检查值,还检查行为。例如,抛出预期异常或使用Mock-object调用外部服务。

void testMethodThrows()
{
    Foo f;
    AssertThrows([&](){f.bar();});
}

void testSendsEmail
{
    Foo f;
    EmailServiceMock email;
    f.bar(email);
    Assert(email.EmailWasSent());
}
于 2013-05-03T06:40:16.270 回答
0

你可以检查任何你喜欢的。虽然对于函数式语言,函数的返回值是函数所做的唯一指示,您可能需要检查全局状态(使用前程序语言)或对象状态(在面向对象的语言中),以确定您的测试是否已通过。

作为一个非常简单(通常没有必要)的示例:

void testSetTextSetsText()
{
  Foo foo();
  foo.setText("bar");
  assertEqual("bar", foo.text());
}

实际上,您无法真正void以另一种方式测试方法。从技术上讲,您在text()这里再次检查方法 ( ) 的返回值,但大多数时候您想编写测试来验证外部观察者可见的状态,所以这已经足够了。

于 2013-05-03T06:33:55.210 回答