We will create a REST service using spring boot which will have an endpoint to upload the file. Then we create JUnit test for upload service using mocking.
Maven dependency
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
REST Service for file upload
Below service reads the content of uploaded file and print on the console. Client application will upload the file using given endpoint "loadFile".@PostMapping(path="/loadFile") public void loadWordsFromFile(MultipartFile file) throws IOException { try(BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream()))){ Set<String> dictList = new HashSet<>(); reader.lines() .filter(ln->ln!=null && !ln.trim().equals("")) .map(ln->ln.split("[\\s*]")) .forEach(arr->{ Arrays.stream(arr) .map(str->str.replaceAll("[.!]", "")) .filter(str->str.length()>0) .forEach(str->{ System.out.println(str); }); }); } }
JUnit Test
Below is the complete code for unit testing where we are creating a mock file with given text and then uploading it to our mocked service.@RunWith(SpringRunner.class) @SpringBootTest public class WordDictionaryApplicationTests { private MockMvc mockMvc; @Autowired WebApplicationContext wContext; @Before public void setup() { this.mockMvc = MockMvcBuilders.webAppContextSetup(wContext) .alwaysDo(MockMvcResultHandlers.print()) .build(); } @Test public void firstUploadWordsTest() throws Exception { String text ="Text to be uploaded."; MockMultipartFile file = new MockMultipartFile("file","test.txt", "text/plain", text.getBytes()); mockMvc.perform(MockMvcRequestBuilders.multipart("/loadFile/") .file(file) .characterEncoding("UTF-8")) .andExpect(MockMvcResultMatchers.status().isOk()); } }
Test output:
After executing the test you will see similar output where it has printed the submitted text from uploaded file.2019-11-17 16:02:36.122 INFO 10269 --- [ main] com.wd.WordDictionaryApplicationTests : Started WordDictionaryApplicationTests in 7.13 seconds (JVM running for 8.675) 2019-11-17 16:02:36.281 INFO 10269 --- [ main] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet '' 2019-11-17 16:02:36.281 INFO 10269 --- [ main] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet '' 2019-11-17 16:02:36.323 INFO 10269 --- [ main] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 41 ms Text to be uploaded
Thanks for sharing such an excellent blog.
ReplyDeletesoftware testing training in adyar
software testing course in vadapalani
software testing training in porur
software testing training in nungambakkam
Very easy to understand your article. Thanks for taking the time to share this article.
ReplyDeleteTop Business Lawyers in Delhi
Information Technology Lawyers in Delhi
Best Corporate Lawyers in Delhi
You've provided quite good information here. This is fantastic since it expands our knowledge and is also beneficial to us. Thank you for sharing this piece of writing. testing and tagging sydney
ReplyDelete