Tag: unit testing

使用Spring时实例化对象,用于测试与生产

我是否正确理解在使用Spring时,您应该使用Spring配置xml来实例化您的对象以进行生产,并在测试时直接实例化对象? 例如。 MyMain.java package org.world.hello; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MyMain { private Room room; public static void speak(String str) { System.out.println(str); } public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext(“Beans.xml”); Room room = (Room) context.getBean(“myRoom”); speak(room.generatePoem()); } } Room.java package org.world.hello; public class Room { private BottleCounter bottleCounter; private int […]

我如何对servlet进行unit testing?

我有一个名为Calculator的servlet。 它通过在响应中设置属性result来读取left , right和op的参数并返回。 unit testing的最简单方法是什么:基本上我想创建一个HttpServletRequest,设置参数,然后检查响应 – 但我该怎么做? 这是servlet代码(它的目的很小而且很愚蠢): public class Calculator extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { public Calculator() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Integer left = Integer.valueOf(request.getParameter(“left”)); Integer right = Integer.valueOf(request.getParameter(“right”)); Integer result = 0; […]

如何在JUnit 5中使用String数组进行参数化

我想编写JUnit 5参数化测试,它将字符串数组( String[] )作为参数: @ParameterizedTest @MethodSource(“stringArrayProvider”) void parseFirstAndSecondInt(String[] args) { Arguments arguments = new Arguments(args); assertEquals(1, arguments.getFirst()); assertEquals(2, arguments.getSecond()); } 我不确定,如何提供字符串数组的集合/流/迭代器。 我没有成功尝试使用@MethodSource注释的方法 static Stream stringArrayProvider() { return Stream.of( new String[]{“1”, “2”}, new String[]{“1”, “2”, “3”}); } 但是我收到了这个例外: org.junit.jupiter.params.converter.ArgumentConversionException: No implicit conversion to convert object of type java.lang.String to type [Ljava.lang.String; 有这种参数化测试的好设计/解决方案是什么?

什么是性能回归测试的最佳工具

我们的组织正在寻找一种工具来帮助每个版本进行性能测试。 我们发布了大量新软件,我们希望确保自上次发布以来关键function的性能没有减慢。 我们有C#和Java代码。 这可以是以下任何内容: 当我运行此function时,它需要<2秒 当我运行这组function时总共<5秒 等。 。 最好是使用我们的基本unit testing持续集成(nunit,junit,team city)和手写性能检查,还是有专门的工具可以帮助专注于这个领域。 有什么建议么?

如何模拟void方法抛出exception?

我有这样的结构: public class CacheWrapper { private Map innerMap; public CacheWrapper() { //initialize the innerMap with an instance for an in-memory cache //that works on external server //current implementation is not relevant for the problem innerMap = …; } public void putInSharedMemory(Object key, Object value) { innerMap.put(key, value); } public Object getFromSharedMemory(Object key) { return innerMap.get(key); […]

Android TestCase中的Dagger 2dependency injection

我已经构建了一个示例应用程序(是的,它实际上只是一个示例,没有多大意义,但有助于理解Dagger 2中的Android清洁架构和dependency injection)。 我的代码可以在github上找到 。(过时。看到这篇文章)示例应用程序只是让你在EditText输入一个名字,如果按下按钮,你会看到一条消息“Hello YourName” 我有三个不同的组件: ApplicationComponent , ActivityComponent和FragmentComponent 。 FragmentComponent包含三个模块: ActivityModule FragmentModule InteractorModule InteractorModule提供了一个MainInteractor 。 @Module public class InteractorModule { @Provides @PerFragment MainInteractor provideMainInteractor () { return new MainInteractor(); } } 在我的Activity-UnitTest中,我想伪造这个MainInteractor 。 这个Interactor只有一个方法public Person createPerson(String name) ,它可以创建一个Person对象。 FakeMainInteractor具有相同的方法,但始终创建​​一个名为“Fake Person”的Person对象,与您传递的参数FakeMainInteractor 。 public class FakeMainInteractor { public Person createPerson(final String name) { return new […]

适当的unit testing技术

在使用TDD时,我发现自己需要测试一个包含查找值的常量(最终)散列图( 请查看为什么这是更新的情况 ) 见下文 private static final Map singleDigitLookup = new HashMap(){{ put(0,”Zero”);put(1,”One”);put(2,”Two”);put(3,”Three”);put(4,”Four”);put(5,”Five”);put(6,”Six”);put(7,”Seven”); put(8,”Eight”);put(9,”Nine”); }}; 对于TDD,它强调要一次测试一件事,所以我开始调用我的类来validation每个元素的有效性,如下所示。 测试风格1 @Test public void whenWordIsOneThenReturn1(){ assertEquals(1, WordToIntegerConverter.toInteger(“One”)); } 在编写第三个测试后,我认为它非常荒谬,并使用反向键值对创建了一个临时查找,并开始调用循环进行测试,如下所示。 测试风格2 @Test public void whenWordIsZeroThroughNineReturnIntegerConversion(){ HashMap lookup = new HashMap(){{ put(0,”Zero”);put(1,”One”);put(2,”Two”);put(3,”Three”);put(4,”Four”);put(5,”Five”); put(6,”Six”);put(7,”Seven”);put(8,”Eight”);put(9,”Nine”); }}; for(int i = 0; i < 10; i++) { assertEquals(i, WordToIntegerConverter.toInteger(lookup.get(i))); } } 我的问题是这样的; 使用样式1进行unit testing是否更好,或者使用样式2更好。 我看到两者的利弊。 […]

如何使Spark Streaming计算unit testing中文件中的单词?

我已经在Java中成功构建了一个非常简单的Spark Streaming应用程序,该应用程序基于Scala中的HdfsCount示例 。 当我将此应用程序提交给我的本地Spark时,它会等待将文件写入给定目录,当我创建该文件时,它会成功打印出单词数。 我按Ctrl + C终止应用程序。 现在我已经尝试为这个function创建一个非常基本的unit testing,但是在测试中我无法打印相同的信息,即单词的数量。 我错过了什么? 下面是unit testing文件,之后我还包含了显示countWords方法的代码片段: StarterAppTest.java import com.google.common.io.Files; import org.apache.spark.streaming.Duration; import org.apache.spark.streaming.api.java.JavaDStream; import org.apache.spark.streaming.api.java.JavaPairDStream; import org.apache.spark.streaming.api.java.JavaStreamingContext; import org.junit.*; import java.io.*; public class StarterAppTest { JavaStreamingContext ssc; File tempDir; @Before public void setUp() { ssc = new JavaStreamingContext(“local”, “test”, new Duration(3000)); tempDir = Files.createTempDir(); tempDir.deleteOnExit(); } @After public void […]

如何编写unit testing以validation函数是否对其结果进行排序?

我有一个数据源,我可以从中请求一个(任何)国家/地区的人员列表,以及一个从该数据源检索人员并按字母顺序按名称对其进行排序的方法。 我应该如何编写unit testing以确保我的方法的排序部分正常工作? 这就是我的SUT的样子: class PeopleStuff { public IData data; public List getSortedPeopleForCountry(String countryName) { List people = data.getPeopleForCountry(countryName); Comparator nameComparator = new PersonNameComparator(); Collections.sort(people, nameComparator); return people; } } 这就是我的unit testing的样子: @Test public void testGetPeopleSortsByPeopleName() { String COUNTRY = “Whatistan”; // set up test (the 3 lines below are actually in a @Before setup […]

JUnit 5 @Nested注释的目的是什么?

在JUnit 5中,有一个新的注释: @Nested 。 我理解它是如何工作的,我理解为什么我们使用嵌套类,我只是不明白为什么我们需要在测试中使用嵌套测试类。