gpt4 book ai didi

java - 在 Mockito 中模拟我们无法明确分配的东西

转载 作者:行者123 更新时间:2023-11-30 06:30:06 24 4
gpt4 key购买 nike

我有一段代码是这样的:

    class Lekcja {
Calendar _date;
public Lekcja() {
_date = Calendar.getInstance();
}
public Calendar getDate() {
return _date;
}
}

我想使用 JUnit4 和 Mockito 来测试它,而不是使用真正的日历对象,我想在那里放一个模拟对象。你能告诉我怎么做吗?

最佳答案

模拟值对象很少是个好主意。你应该模拟行为,而不是数据。我想您真正想要实现的是能够在测试中使用任意日期(这是个好主意)。

我在这种情况下成功使用的模式是 fake system clock (该站点的示例):

public interface TimeSource {
long currentTimeMillis();
}

还有两个实现,真实的:

public final class RealSource implements TimeSource {

public long currentTimeMillis() {
return System.currentTimeMillis();
}

}

和假的测试:

public final class FakeSource implements TimeSource {

public long currentTimeMillis() {
return //...whatever you want
}

}

我发现在辅助方法中将 currentTimeMillis() 设置为静态并使用指向当前 TimeSourcestatic 字段很方便。

最后,更简单的方法是直接传递日期:

class Lekcja {
Calendar _date;
public Lekcja(Calendar date) {
this._date = date;
}
//...
}

另见

关于java - 在 Mockito 中模拟我们无法明确分配的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10846269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com