谷歌模拟expect_call退休另一个期望

时间:2017-05-04 15:18:42

标签: c++ googlemock

我有两个嘲笑。其中只有一个应该被调用进行一次运行,我想用期望来确定<jboss-web> <context-root>/</context-root> <security-domain>cert-login</security-domain> </jboss-web> 函数是否成功,而不知道给定的前提条件。
如何实现这一目标?

  <security-constraint>
  <web-resource-collection>
     <web-resource-name>Cert Login Page</web-resource-name>
     <url-pattern>/cert/detect</url-pattern>
  </web-resource-collection>

  <auth-constraint>
     <role-name>certuser</role-name>
  </auth-constraint>
</security-constraint>

<login-config>
  <auth-method>CLIENT-CERT</auth-method>
</login-config>

<security-role>
  <role-name>certuser</role-name>
</security-role>

上述任何一项都应该有效或低于预期,但只有其中一项。

execute()

1 个答案:

答案 0 :(得分:1)

期望的内容是一个(且只有一个)协作者已被调用。

一个可行的解决方案(如other languages中所示)是让这些模拟增加测试范围中的共享计数器

您可以通过defining actions使用GoogleMock实现此目的。它会是这样的:

SuccessMock successMock;
FailMock failMock;

int callCounter = 0;


ON_CALL(successMock, performOnSuccess())
  .WillByDefault(InvokeWithoutArgs([&]()
                 {
                     callCounter++;
                 });

ON_CALL(failMock, performOnFailure())
  .WillByDefault(InvokeWithoutArgs([&]()
                 {
                     callsCounter++;
                 });


execute(successMock, failMock);

ASSERT_THAT(callsCounter, Eq(1));

话虽如此,这个测试中有一些我不喜欢的随机性。你应该最终得到一个期待失败的测试,另一个期待成功。

我为此写了一个简化的gist