当前位置: 首页 > 面试题库 >

有没有使用Hamcrest匹配字段的简单方法?

谢修真
2023-03-14
问题内容

我想测试对象的特定字段是否与我指定的值匹配。在这种情况下,它是S3Bucket对象内的存储桶名称。据我所知,我需要为此编写一个自定义匹配器:

mockery.checking(new Expectations() {{
  one(query.s3).getObject(with(
      new BaseMatcher<S3Bucket>() {
        @Override
        public boolean matches(Object item) {
          if (item instanceof S3Bucket) {
            return ((S3Bucket)item).getName().equals("bucket");
          } else {
            return false;
          }
        }
        @Override
        public void describeTo(Description description) {
          description.appendText("Bucket name isn't \"bucket\"");
        }
      }), with(equal("key")));
    ...
    }});

如果有一个更简单的方法可以做到这一点,那就好了:

mockery.checking(new Expectations() {{
  one(query.s3).getObject(
    with(equal(methodOf(S3Bucket.class).getName(), "bucket")),
    with(equal("key")));
    ...
}});

谁能指出我类似的东西?我想在这种情况下我已经解决了我的问题,但这不是我第一次希望采用一种更简单的方法。


问题答案:

另外,对于更类型安全的版本,还有FeatureMatcher。在这种情况下,类似:

private Matcher<S3Bucket> bucketName(final String expected) {
  return new FeatureMatcher<S3Bucket, String>(equalTo(expected), 
                                              "bucket called", "name") {
     String featureValueOf(S3Bucket actual) {
       return actual.getName();
     }
  };
}

给予:

mockery.checking(new Expectations() {{
  one(query.s3).getObject(with(bucketName("bucket")), with(equalTo("key")));
    ...
}});

这两个字符串参数的目的是使不匹配报告读得很好。



 类似资料:
  • 我正在开发一个运行在微控制器上的程序,需要实现程序代码完整性的自我测试。 为此,我让代码在整个闪存(程序空间)上计算一个CRC16校验和,并通过某个网络将该值传输到另一个系统。然后,另一个系统必须将校验和与预先计算的值进行比较。 (如果需要,我还可以实现CRC-16以外的另一个校验和算法。) 谢谢你的回答!

  • 本文向大家介绍cmake 没有包的简单方法,包括了cmake 没有包的简单方法的使用技巧和注意事项,需要的朋友参考一下 示例 构建可执行文件(编辑器)并将其链接到库的示例(突出显示)。项目结构简单明了,每个子项目都需要一个主CMakeLists和一个目录: 母版CMakeLists.txt包含全局定义,并add_subdirectory针对每个子项目进行调用: 库的CMakeLists.txt分配

  • 我正试图将Hamcrest匹配器引入到我的团队的一些代码中。为了消除匹配实例集合的复杂性,我想为我的每个匹配器编写一个帮助器方法,我希望匹配的集合。所以本质上,我是在包装容器InAnyOrder。也就是说,如果有人以null作为预期和实际传递,我希望它匹配。但是按照我编写代码的方式,如果为预期传递null,它将抛出一个NullPointerExcION。所以我想返回一个IsNull匹配器,如果nu

  • 我有一个正在测试的方法,它返回一个对象列表。。。例如“Person”对象。 我有一个“预期的最后名字”列表来验证结果。 我目前有一个工作测试,它循环遍历“expectedLastNames”中的名称,并断言每个名称都包含在“Person”对象列表中。与此类似(请注意,以下代码段位于Kotlin中): 当断言通过时,这非常有效,并验证了我的方法。然而,当测试失败时,这是非常麻烦的,因为一旦遇到缺少的

  • 我是cucumber新手。我想测试两个登录场景: 使用用户应该能够成功登录的有效凭据 用户应该无法登录的空用户名和密码 我有上述场景的以下代码: 在java文件中,我有以下代码: 我的问题是,场景2显示了一条警告消息: 这是否意味着对于每个场景,如有效、空和无效凭据,我都需要编写一个单独的java函数?我不能使用相同的java函数: 对于所有场景?如果运行功能文件,则会得到以下输出: 是否有任何方

  • 问题内容: 似乎有很多方法可以在Python中定义单例。关于堆栈溢出是否有共识? 问题答案: 我没有真正的需要,因为具有功能(而不是类)的模块可以很好地用作单例。它的所有变量都将绑定到模块,该模块无论如何都无法重复实例化。 如果您确实希望使用类,则无法在Python中创建私有类或私有构造函数,因此,您只能通过使用API​​的约定来保护自己免受多重实例化。我仍然将方法放在模块中,并将模块视为单例。