gpt4 book ai didi

c# - 如何先开发秒表类测试?

转载 作者:行者123 更新时间:2023-11-28 21:01:14 25 4
gpt4 key购买 nike

我目前正在尝试实现一个 StopWatch 类。界面是这样的:

interface IStopWatch {
void Run();
void Stop();
int SecondsElapsed { get; }
int MinutesElapsed { get; }
}

基本上我的应用程序需要使用 StopWatch,但出于测试目的,最好有一种方法来人工修改 StopWatches 的结果,所以这就是我让所有代码引用 IStopWatch 而不是 .NET 的 System.Stopwatch 的原因。

当我试图开发这个测试优先时,我必须在编写测试后才为我的 StopWatch 类编写代码。我已经意识到我将要进行的测试不会是单元测试,因为我在内部使用 .NET 的 System.Stopwatch 类。

因此,据我所知,我现在唯一能做的就是如下所示的测试:

[TestMethod]
public void Right_After_Calling_Run_Elapsed_Minutes_Equals_Zero() {
IStopWatch stopWatch = new StopWatch();
stopWatch.Run();
Assert.AreEqual<int>(0, stopWatch.ElapsedMinutes);
}

[TestMethod]
public void One_Second_After_Run_Elapsed_Seconds_Equals_One() {
IStopWatch stopWatch = new StopWatch();
stopWatch.Run();
Thread.Sleep(1000 + 10);
Assert.AreEqual<int>(1, stopWatch.ElapsedSeconds);
}

[TestMethod]
public void Sixty_Seconds_After_Run_Elapsed_Minutes_Equals_One() {
IStopWatch stopWatch = new StopWatch();
stopWatch.Run();
Thread.Sleep(60 * 1000 + 1000);
Assert.AreEqual<int>(1, stopWatch.ElapsedMinutes);
}

我知道我不能像单元测试那样经常运行它,但我认为我对此无能为力。我的方法正确还是我遗漏了什么?

谢谢

编辑

所以我最终听从了 Quinn351 和 Sjoerd 的建议,编写了一些使用 DateTimes 而不是 .NET 的 Stopwatch 类的代码:

public class MyStopWatch : IMyStopWatch {
private DateTime? firstDateTime = null;
private DateTime? secondDateTime = null;
private bool isRunning = false;

public void Start() {
isRunning = true;
firstDateTime = DateTime.Now;
}

public void Stop() {
isRunning = false;
secondDateTime = DateTime.Now;
}

public void Reset() {
firstDateTime = null;
secondDateTime = null;
isRunning = false;
}

public TimeSpan GetTimeElapsed() {
return secondDateTime.Value.Subtract(firstDateTime.Value);
}
}

这让我可以为两个日期创建具有 getter/setter 的其他实现,这样我就可以让 GetTimeElapsed() 返回我想要的任何内容。

最佳答案

为什么会“人为修改秒表的结果”?!如果您要修改结果,测试的全部目的是什么?

至于测试,你还应该测试 stop 方法,你应该测试秒数是否大约是分钟数的 60 倍。

您正在编写的类也可以在内部使用 StopWatch,然后根据要求修改结果(然后您可以随时返回到原始结果)。

PS:方法名要短,不能有下划线。

关于c# - 如何先开发秒表类测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3540957/

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