当前位置:  开发笔记 > 运维 > 正文

如何对自定义ant任务进行单元测试?

如何解决《如何对自定义ant任务进行单元测试?》经验,为你挑选了1个好方法。

我正在编写一个扩展Task的自定义ant任务.我在任务中使用log()方法.我想要做的是在开发任务时使用单元测试,但我不知道如何为任务设置上下文以初始化任务,就像它在ant中运行一样.

这是自定义任务:

public class CopyAndSetPropertiesForFiles extends Task {
    public void execute() throws BuildException {
        log("CopyAndSetPropertiesForFiles begin execute()");

        log("CopyAndSetPropertiesForFiles end execute()");
    }
}

这是单元测试代码:

CopyAndSetPropertiesForFiles task = new CopyAndSetPropertiesForFiles();
task.execute();

当代码作为测试运行时,它在调用log时会产生NullPointerException.

java.lang.NullPointerException
    at org.apache.tools.ant.Task.log(Task.java:346)
    at org.apache.tools.ant.Task.log(Task.java:334)
    at uk.co.tbp.ant.custom.CopyAndSetPropertiesForFiles.execute(CopyAndSetPropertiesForFiles.java:40)
    at uk.co.tbp.ant.custom.test.TestCopyAndSetPropertiesForFiles.testCopyAndSetPropertiesForFiles(TestCopyAndSetPropertiesForFiles.java:22)

有没有人知道提供上下文或存根或类似任务的方法?

谢谢,

抢.

接受Abarax的回答.我能够调用task.setProject(new Project()); 代码现在执行正常(除了控制台中没有记录 - 至少我可以执行代码:-)).



1> Chii..:

或者更好的是,将任务对象本身与任务中的逻辑(让我们称之为TaskImpl)分离 - 这样您就可以传入自己的依赖项(例如,记录器).然后,您可以测试TaskImpl - >,而不是测试任务对象,您可以在记录器中传递它,以及它可能需要完成其工作的任何其他奇怪的部分.然后单元测试就是模拟依赖关系.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有