1. 程式人生 > >用junit測試控制檯輸入

用junit測試控制檯輸入

前言:junit測試預設是不支援控制檯輸入的,如果有需要,可以通過變相的方式實現控制檯輸入,詳情看下文

今天我寫了一個鍵盤類的輸入功能,這個類長這樣,它繼承自一個鍵盤介面。

public interface KeyBoard {
    String input();
}
public class KeyBoardImpl implements KeyBoard {
    @Override
    public String input() {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        return input;
    }
}

為了測試這個類的輸入功能,我寫了這樣一個測試用例,用的是junit

public class KeyBoardImplTest {
    KeyBoard keyBoard = new KeyBoardImpl();

    @Test
    public void test() {
        String input = keyBoard.input();
        System.out.println(input);
    }
}

但是我在執行該測試用例後,發現無法在控制檯輸入任何內容,程式停在那裡不動了。

我嘗試了一下在main函式裡面寫個用例,發現能夠輸入。

public class KeyBoardImpl implements KeyBoard {
    @Override
    public String input() {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        return input;
    }

    public static void main(String[] args) {
        KeyBoard keyBoard = new KeyBoardImpl();
        String input = keyBoard.input();
        System.out.printf(input);
    }
}

image.png

這是為啥呢,經過網上搜索,我找到了解決方案,並且大致瞭解了原因: junit是用例自動化單元測試的,那麼控制檯輸入這個人工操作就應該不會支援,解決方案如下

public class KeyBoardImplTest {
    KeyBoard keyBoard = new KeyBoardImpl();

    @Test
    public void testInput() throws Exception {
        String data = "Hello, World!\r\n";
        String input;
        InputStream stdin = System.in;
        try {
            System.setIn(new ByteArrayInputStream(data.getBytes()));
            input = keyBoard.input();
        } finally {
            System.setIn(stdin);
        }
        System.out.println("input is----" + input);
    }
}

執行該測試用例,得到了希望的結果:

相關推薦

junit測試控制檯輸入

前言:junit測試預設是不支援控制檯輸入的,如果有需要,可以通過變相的方式實現控制檯輸入,詳情看下文 今天我寫了一個鍵盤類的輸入功能,這個類長這樣,它繼承自一個鍵盤介面。 public interface KeyBoard { String input();

myEclipse可以main執行,不能debug,不能Junit測試--解決方案及原因

今天,寫完任務時,打算單元測試一下,發現執行@Test下的方法後,雖能自動跳到JUnit視窗,但是Runs是0/0,Errors:0,Failures:0,原本顯示綠或紅的進度條也沒反應,我就蒙了,怎麼會不能用呢? 不能用junit測試,那就寫個main也能實現測試的目的,

Spring註解程式設計時junit測試時,顯示jdK版本過低問題,更改版本後仍然不行的解決方法

Spring註解程式設計時,用Junit測試時報錯JDK版本過低,更換JDK版本後, 會報錯不支援本JDK版本的解決方法;;;; 弄了好長時間沒弄好 原來先把JDK版本換到JDK6或者JDK7的版本   並且配置好環境變數 和 eclipse執行JDK版本  使他們和你安

javajunit測試service層方法的工具類

常規的寫法:可以直接在junit測試類上寫註解import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguratio

Junit測試類中如何調Http通信

soft size framework pan font auto 測試 mock unit 在使用Junit做測試的時候,有時候需要調用Http通信,無論是request還是response或者是session會話,那麽在測試類裏該如何調用呢,其實很簡單,spring給我

如何開始Junit進行單元測試

nbsp gif isp public aik 分享 pan 因此 可操作性 近段時間,公司預備推動單元測試以提高轉測代碼的質量,借鑒學習一些測試大佬的經驗自己試了一把,小測我在此寫下初寫單元測試的心得,希望能和大家交流交流單元測試技術! 一、概述 1、 單元測試(

基於spring和mybatis專案的JUnit測試例的實現

主要目的:實現JUnit的Crud 專案目前情況:spring+mybatis 想在前後端分離的情況下, 後端實現各個模組CRUD的junit 遇到的最大問題先是注入之後提示nullPointException 接著很快反應過來 是junit執行單個檔案的時候並沒有在啟動容器

spring+junit4時Junit單元測試遇到的bug:java.lang.ExceptionInInitializerError

一、詳細錯誤日誌: 二、具體描述: 由於第一次用spring+Junit4進行單元測試,對他們瞭解不夠深入,出現這個bug時真的是手忙腳亂的,各種百度,各種嘗試就是解決不了,網上好多方法都試了就是不行,現在想來不是網上的解決方法不行,而是我遇到的問題和他們不一樣啊。網上說j

maven專案管理器,Junit測試單元以及C3P0資料庫連線池的會總結

最近剛好連續學習了maven專案管理器,Junit測試單元以及C3P0資料庫連線池的使用,現將學習工程中遇到的問題與注意點總結如下: 1.maven專案管理器 maven是一種很好用的專案管理器,在開發工具中建立一個maven專案,它會自動生成各種目錄,有專門存放java

IDEA 執行 junit 測試控制檯中文亂碼

試了網上的很多方法,比如修改 JVM 的啟動引數、修改 IDEA bin安裝目錄的啟動引數,修改IDEA的設定: Settings->Editor->File Encodings 的 Global Encoding、Project Encoding、Default enco

Junit測試例配置Log4j

用Junit測試非常方便,但有時我們想要看日誌來方便排除,使用spring+log4j時,用Junit測試看日誌很多人都不太會,即如何將Junit與log4j進行整合。 我也是研究了半天,才終於找到了方法,特此拿來與大家分享下。 Junit+spring+log4j整

SSH框架下JUnit和spring-test和EasyMock單元測試

用Junit和EasyMock測試註冊用例說明及結果截圖 1.  沒有相同使用者名稱,可以用該使用者名稱註冊 說明:為需要呼叫的IuserService介面例項建立mock物件,並模擬返回find(查詢資料庫中是否同名)結果為null,即資料庫中 無該使用者名稱,可以註冊 package com.user

黑盒測試例設計模式-輸入域分析

一、概念         什麼是輸入域分析:輸入域分析是一種綜合的方法,綜合了等價類劃分法、邊界值分析法等方法。這裡說的輸入域就是指輸入,針對輸入會有各種 各樣的輸入值。輸入域測試主要考慮三個方面:

1、從控制檯輸入5個數,氣泡排序法對它們排序,再輸出。

#include<iostream.h> void main(){  int i,j,k,t; int a[5];  cout<<"請輸入5個數:"<<endl;  for(i=0;i<5;i++) cin>>a[i];

Spring TestContext 做帶事務回滾的JUnit測試

JUnit單元測試框架很常用 但可能會破壞資料庫現場 以及大量的硬編碼出現(applicationContext.getBean(""));今天哥們給新手介紹一下 Spring Test這個Spring自帶的jar包中的一些註解 實現單元測試+事務回滾+註解依賴注入 網上的

MyEclipse 下Junit建立測試

1>專案-------->右鍵-------->source folde       建立一個資料夾,目錄名最好為test; 2>右鍵點選新建立的test資料夾,建立一個包,包名要和你所測試的類的包名一致; 3>在包下建立測試類,類名最好是**

1switch語句從控制檯輸入100以內的分數判斷優秀,良好,及格不及格屬於哪一個區間

public static void main(String[] args) {       System.out.println("請輸入成績");       Scanner scanner=new Scanner(System.in);       int num=s

MyBatis+JUnit測試Dao(Mapper)的例實現( 不啟動web工程 且 未使用SpringMVC管理MyBatis時 )

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-

執行測試例集過程中在jenkins控制檯列印當前測試結果(testng)

      由於測試用例集是使用jenkins排程的,在jenkins控制檯中只能看到所有用例執行結束後testng的彙總報告資訊,在測試執行過程中不能直觀看到每個測試用例的執行結果,比如我們比較關心失敗的用例 在用例結束後應該立即可以看到錯誤資訊和堆疊資訊,為了在jenk

junit測試例啟動報錯java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig

開發十年,就只剩下這套架構體系了! >>>