您好,我对Junit和Mockito的单元测试相当陌生。我认为我对这些原则有一个相当合理的理解,但我似乎找不到任何解释来解释我特别想在网上测试什么。
我想测试一个方法,它调用其他几个方法(void和non-void),该方法还实例化了方法体中的对象。不幸的是,我不能分享代码,因为它不是我的,但这里有一个通用格式:
class classToTest {
private final field_1;
public void methodToTest( string id, List object_1, List object_2) {
try {
Map<SomeObject_1, SomeObject_2> sampleMap = new HashMap<>();
method_1(object_1, object_2); //void function modifies object_2
field_1.method_2(id, object_2);
Map<SomObeject_1, List<object>> groupedList = groupList(object_2)
//Then some stuff is added to the sampleMap
}
//catch would be here
}
目前我只关心测试method_1,我不能直接测试,因为它是一个私有方法,所以我必须通过这个父方法调用。我希望我能改变代码,但我被要求保持不变,并以这种方式用Mockito和JUnit进行测试。
我知道我需要模拟要测试的类的对象及其参数:
private classToTest classToTestObject;
@Mock private field_1 f1;
@Before
public void setup() {
MockitoAnnotations.init.Mocks(this);
classToTestObject = mock(classToTest.class, CALLS_REAL_METHODS);
}
但我不知道从哪里开始我的实际测试,因为我基本上可以只执行一个方法调用,而忽略所有其他方法调用。我不能忽略其他对象和方法调用,因为如果处理不当,主方法将抛出异常。
非常感谢您的帮助和指导,很抱歉我不能分享代码。非常感谢。
目前我只关心测试方法_1,我不能直接测试,因为它是一个私有方法,所以我必须完成这个父方法调用。
根据您的评论和代码中的注释:
method_1(object_1, object_2); //void function modifies object_2
您将设置一个测试,允许您验证对象2
的预期最终状态。您可以使用该类的真实实例,而不是模拟实例来执行此操作。
@Test
public void method1Test() {
// Assemble - your preconditions
ClassToTest subject = new ClassToTest();
List<SomeType> object_1 = new ArrayList();
List<SomeOtherType> object_2 = new ArrayList();
// Populate object_1 and object_2 with data to use as input
// that won't throw exceptions. Call any methods on subject that put
// it in the desired state
// Act - call the method that calls the method under test
subject.methodToTest("some id that makes the method run correctly", object_1, object_2);
// Assert - one or more assertions against the expected final state of object_2
assertThat(object_2).matchesYourExpectations();
}
到今天为止,我一直在研究单元测试,遇到了一个障碍。我有一个给定的方法,我想用unittest测试,这个方法可能有错误,也可能没有错误。方法如下: 此方法应该输出由两个时间跨度的重叠时间构造的新时间跨度。我为此方法编写了一个单元测试,如下所示: 为了相互比较对象,我重写了TimeSpan类中的equals方法,如下所示: 查看测试中给定的时间跨度,我希望测试能够通过,但正如您所猜测的那样,它没有通过
我有这两种方法,在使用Mock实现测试时遇到了困难。我该如何参加考试? 我有麻烦得到Jboss目录而不必启动System.get属性(jboss.server.temp.dir);
第二个类有一个简单的方法,它只返回一个字符串,该字符串作为参数传递给该方法 现在有一个Sample类,我在Sample Classe的方法中调用了这个show方法并返回字符串。 现在我正在测试示例类,因此我创建了一个名为SampleTest的文件
我的控制器 这是我的控制器测试用例 我正在将User对象转换为string并将其发布到控制器方法。我正在尝试模拟userService.validateUser()将返回新的空User对象的服务方法。由于发布到service方法的对象和控制器接收到的对象不同,所以service返回null。如何让service方法返回空用户对象?
我试图将EasyMock与JUnit一起使用,但在对JUnit4方法中的模拟依赖项调度方法调用时遇到了困难。 在下面的示例中,测试类正在测试类。被传递到的构造函数,在构造函数中调用的方法之一,返回初始化所需的值。初始化的过程对所有测试都是相同的,所以我用JUnit4注释修饰方法。 在测试方法时,我们期望调用mock实例以返回一个值,我们在方法中调度该值。但是,这个测试意外失败,出现错误,尽管这个调