java - 如何对java main方法进行单元测试?

标签 java junit4

我有一个类,我必须通过它的主要方法传递 2 个参数,如果传递的参数少于 2 个,它会显示系统错误消息。我在这里为主要方法写了一个单元测试,当我运行测试时,它停止在“运行”(既不显示通过也不显示失败)。请建议。

例子.java

public class Example 
{
    private static String str1   = null;
    private static String str2   = null;

    public static void main(String[] args)
    {
        if( args.length != 2 )
        {
            call();
        }

        Example ex = new Example(args[0], args[1]);
        ex.getData();
    }

    public Example(String str1, String str2)
    {
        Example.str1 = str1;
        Example.str2 = str2;
    }

    public void getData(){
        System.out.println("Name is: "+str1);
        System.out.println("City is: "+str2);
    }

    private static void call()
    {
        System.err.println("Usage: String1 String2");
        System.err.println("Where: ");
        System.err.println("       String1 - Name");
        System.err.println("       String1 - City");
        System.exit(1);
    }   
}

ExampleTest.java

public class ExampleTest {
    @Test
    public void testPassingWrongNumberOfInputs() {
        StringBuffer sb = new StringBuffer();
        sb.append("Usage: String1 String2")
        .append("Where: ")
        .append("       String1 - Name")
        .append("       String1 - City");

        String expectedErrorMessage = sb.toString();

        ByteArrayOutputStream outContent = new ByteArrayOutputStream();
        System.setErr(new PrintStream(outContent));
        String[] args = {"one"};
        Example.main(args);

        assertEquals(expectedErrorMessage, outContent.toString());
    }
}

最佳答案

以下情况如何:

class TestingSecurityManager extends SecurityManager {
  @Override public void checkExit(int status) {
    throw new SecurityException();
  }
}

然后在你的测试中......

public class ExampleTest {
    @Test
    public void testPassingWrongNumberOfInputs() {
        StringBuffer sb = new StringBuffer();
        sb.append("Usage: String1 String2")
        .append("Where: ")
        .append("       String1 - Name")
        .append("       String1 - City");

        String expectedErrorMessage = sb.toString();

        ByteArrayOutputStream outContent = new ByteArrayOutputStream();
        System.setErr(new PrintStream(outContent));
        String[] args = {"one"};

        TestSecurityManager sm = new TestSecurityManager ();
        System.setSecurityManager(sm);

        try {
            Example.main(args);
            //should throw
            fail("Should have thrown exception");
        } catch (SecurityException se) {
        }

        assertEquals(expectedErrorMessage, outContent.toString());
    }
}

关于java - 如何对java main方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34601363/

相关文章:

java - 在 Java 中使用树计算 Postfix 表达式

java - 二叉搜索树,你如何找到最大值?

Java Junit4 测试; protected 方法

java - 无法在 Junit 中 Autowiring bean

java - 为什么我在这里收到 InvalidUseOfMatchers 构建错误?

java - 从java更新oracle数据库中的日期/时间

java - getResourceAsStream 在 jUnit 上工作,但不在 Tomcat 上工作

java - 条件运算符(!=)(If-else 语句)

selenium-webdriver - 不要等待页面加载

java - AEM - 用于查询生成器的 JUnit 测试用例