gpt4 book ai didi

c# - 单元测试时间增量

转载 作者:太空宇宙 更新时间:2023-11-03 18:42:37 24 4
gpt4 key购买 nike

我想对以下方法进行单元测试:

public void Upload(string identifier, Stream data)
{
var startTime = SystemTime.Now;

innerDataIntegrationInterface.Upload(identifier, data);

var endTime = SystemTime.Now;

TimeSpan totalUploadTime = endTime.Subtract(startTime);
float transferRate = data.Length / (float)(totalUploadTime.Seconds + totalUploadTime.Milliseconds);

m_log.Info(string.Format("Total uploading time for '{0}' was {1:00}.{2:000000} milliseconds transfered at {3} bytes/sec", identifier, totalUploadTime.Seconds, totalUploadTime.Milliseconds, transferRate));
}

基本上我已经注入(inject)了 SystemTime 对象,所以我可以在我的测试中设置它,但我不知道该怎么做才能让 startTime 和 endTime 变量获得不同的值,所以我可以断言 m_log.Info 方法使用正确的 totalUploadTime 和 transferRate 变量值调用。

如有任何想法,我们将不胜感激。

最佳答案

时钟的概念 - 可以获取当前时间的东西 - 实际上是您所依赖的服务。如果您像任何其他服务一样通过某个接口(interface) (IClock) 依赖它显式。然后,您可以创建一个委托(delegate)给 System.DateTime.UtcNowSystem.DateTime.Now 的“生产”实现,以及一个用于测试的虚假实现或模拟。

就我个人的经验而言,值得拥有一个可以设置、推进等的假体,而不是为这个特定场景使用模拟框架——这是一种我自己见过并使用过很多次的技术(这就是 Noda Time 支持的原因它带有 IClock 接口(interface)和 StubClock 实现)。

关于c# - 单元测试时间增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7434584/

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