Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 模拟方法不';t返回预期结果_Java_Unit Testing_Mocking_Mockito - Fatal编程技术网

Java 模拟方法不';t返回预期结果

Java 模拟方法不';t返回预期结果,java,unit-testing,mocking,mockito,Java,Unit Testing,Mocking,Mockito,我想模拟接受对象参数的方法mockedMethod(objectobjectobject)。此对象参数是根据testedMethod动态创建的mockedMethod不会返回预期结果,尽管两个对象具有相同的数据,但只有不同的hashCode 下面是一个例子 public void testedMethod() { Object object = initObject(); // this object is initialized dynamically Long result

我想模拟接受对象参数的方法
mockedMethod(objectobjectobject)
。此对象参数是根据
testedMethod
动态创建的
mockedMethod
不会返回预期结果,尽管两个对象具有相同的数据,但只有不同的hashCode

下面是一个例子

public void testedMethod() {
    Object object = initObject(); // this object is initialized dynamically
    Long result = mockedMethod(object);
    ...
}

@Test
public void test() {
    Object object = new Object();
    when(api.mockedMethod(object).thenReturn(3L);
    testedMethod();
}

有没有办法模仿这个方法,让它以预期的结果响应

当然不是“预期的”;您将一个完全不同的对象传递到
when
子句中,该方法使用自己的from
initObject()
。您应该将
对象
注入到被测试的类中,或者
mockedMethod
属于服务接口,并且您应该对其进行模拟。

当然它不是“预期的”;您将一个完全不同的对象传递到
when
子句中,该方法使用自己的from
initObject()
。您应该将
对象
注入到被测试的类中,或者
mockedMethod
属于服务接口,并且您应该对其进行模拟。

当然它不是“预期的”;您将一个完全不同的对象传递到
when
子句中,该方法使用自己的from
initObject()
。您应该将
对象
注入到被测试的类中,或者
mockedMethod
属于服务接口,并且您应该对其进行模拟。

当然它不是“预期的”;您将一个完全不同的对象传递到
when
子句中,该方法使用自己的from
initObject()
。您应该将
对象
注入到被测试的类中,或者
mockedMethod
属于服务接口,并且您应该对其进行模拟。

这里似乎有两个选项:

接受任何东西 您可以使用注释中提到的
any()
notNull()
。它们定义了任何参数(
any
)或任何非空参数(
notNull
)的行为

这些静态方法返回,可以在继承自的上找到(以保持API稍微分开)

编写自己的自定义匹配器 如果需要检查对象是否符合某些自定义条件,可以使用自定义ArgumentMatcher对象。这些对象(也称为Hamcrest匹配器,因为它们直接来自Hamcrest库)只有一个布尔方法,如果对象匹配条件,则返回true

/** Returns true if the passed object has FooBar anywhere in its class name. */
class HasFooBarInClassName extends ArgumentMatcher<Object> {
  @Override public boolean matches(Object object) {
    return object.getClass().getName().contains("FooBar");
  }
}

when(api.mockedMethod(argThat(new HasFooBarInClassName())).thenReturn(3L);

看起来你有两个选择:

接受任何东西 您可以使用注释中提到的
any()
notNull()
。它们定义了任何参数(
any
)或任何非空参数(
notNull
)的行为

这些静态方法返回,可以在继承自的上找到(以保持API稍微分开)

编写自己的自定义匹配器 如果需要检查对象是否符合某些自定义条件,可以使用自定义ArgumentMatcher对象。这些对象(也称为Hamcrest匹配器,因为它们直接来自Hamcrest库)只有一个布尔方法,如果对象匹配条件,则返回true

/** Returns true if the passed object has FooBar anywhere in its class name. */
class HasFooBarInClassName extends ArgumentMatcher<Object> {
  @Override public boolean matches(Object object) {
    return object.getClass().getName().contains("FooBar");
  }
}

when(api.mockedMethod(argThat(new HasFooBarInClassName())).thenReturn(3L);

看起来你有两个选择:

接受任何东西 您可以使用注释中提到的
any()
notNull()
。它们定义了任何参数(
any
)或任何非空参数(
notNull
)的行为

这些静态方法返回,可以在继承自的上找到(以保持API稍微分开)

编写自己的自定义匹配器 如果需要检查对象是否符合某些自定义条件,可以使用自定义ArgumentMatcher对象。这些对象(也称为Hamcrest匹配器,因为它们直接来自Hamcrest库)只有一个布尔方法,如果对象匹配条件,则返回true

/** Returns true if the passed object has FooBar anywhere in its class name. */
class HasFooBarInClassName extends ArgumentMatcher<Object> {
  @Override public boolean matches(Object object) {
    return object.getClass().getName().contains("FooBar");
  }
}

when(api.mockedMethod(argThat(new HasFooBarInClassName())).thenReturn(3L);

看起来你有两个选择:

接受任何东西 您可以使用注释中提到的
any()
notNull()
。它们定义了任何参数(
any
)或任何非空参数(
notNull
)的行为

这些静态方法返回,可以在继承自的上找到(以保持API稍微分开)

编写自己的自定义匹配器 如果需要检查对象是否符合某些自定义条件,可以使用自定义ArgumentMatcher对象。这些对象(也称为Hamcrest匹配器,因为它们直接来自Hamcrest库)只有一个布尔方法,如果对象匹配条件,则返回true

/** Returns true if the passed object has FooBar anywhere in its class name. */
class HasFooBarInClassName extends ArgumentMatcher<Object> {
  @Override public boolean matches(Object object) {
    return object.getClass().getName().contains("FooBar");
  }
}

when(api.mockedMethod(argThat(new HasFooBarInClassName())).thenReturn(3L);

好的,我知道你建议的解决方案。但它迫使我改变API。因此,我正在寻找其他解决方法。好的,我知道你建议的解决方法。但它迫使我改变API。因此,我正在寻找其他解决方法。好的,我知道你建议的解决方法。但它迫使我改变API。因此,我正在寻找其他解决方法。好的,我知道你建议的解决方法。但它迫使我改变API。因此,我正在寻找其他方法来解决它。您是否真的关心作为参数传递的对象是什么,或者它可能是什么?然后您可以尝试
when(api.mockedMethod(notNull())。然后返回(3L)
。让我知道这是否是您真正想要的,这样我就可以添加它作为答案,如果您真的关心作为参数传递的对象是什么,或者它可能是什么?然后您可以在(api.mockedMethod(notNull())时尝试
。然后返回(3L)
。让我知道这是否是您真正想要的,这样我就可以添加它作为答案,如果您真的关心作为参数传递的对象是什么,或者它可能是什么?然后您可以在(api.mockedMethod(notNull())时尝试
。然后返回(3L)
。如果需要,请告诉我