junit测试类的以下代码

junit测试类的以下代码,第1张

junit测试类的以下代码

首先,我要做一些假设。

user.getUsername()
user.getPass()
无副作用的影响。该
System.out.println
是对你并不重要。

这样,您的课程就变成了:

public class Fortest {    Phone name = new Phone();    public String handleUser(User user) {        String ph = name.getA();        if(ph.equalsIgnoreCase("test")){ return "done";        }        return  "failed";    } }

因此,您的测试有两个条件。要么

phone.getA()
是“测试”,然后返回“完成”,要么不是,然后返回“失败”。

那么如何设置设置为“

getA
”。可以肯定的是,我们需要能够从测试中设置“名称”。为此,我们需要“注入”它(我们可以通过其他多种方式来实现它,但是我喜欢注入)。我会用Guice,许多人会用Spring。有些人会使用其他注入框架之一。但是在测试中,我们大多数人会使用手动注射。

public class Fortest {    Phone name;    Fortest(Phone name) {        this.name = name;    }    public String handleUser(User user) {        String ph = name.getA();        if(ph.equalsIgnoreCase("test")){ return "done";        }        return  "failed";    } }public class TestFortest {   @Before   public void before() {          name = ; //...subject = new Fortest(name);   }}

现在测试非常简单:

public void whenTestModeIsEnabledThenReturnDone() {     setPhoneIntoTestMode();     String actual = subject.handleUser(null);     assertEquals(actual, "done");}public void whenTestModeIsDisabledThenReturnFailed() {     setPhoneIntoLiveMode();     String actual = subject.handleUser(null);     assertEquals(actual, "failed");}

setPhoneIntoTestMode
/
的实现
setPhoneIntoLiveMode
取决于复杂
Phone
程度。如果它比我们要复杂的话,我们会以某种方式(模拟,存根等)看待它。这可能是您编写的代码块,也可能使用了Mocketo之类的工具。

如果Phone对象很简单,并且具有或可以具有“

setA
”方法,则只需使用该方法。

我相信以后你将需要

userdao
。届时将做同样的事情。注入并模拟/设置对象。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5615736.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存