gpt4 book ai didi

c# - 如何为遗留代码编写测试然后重构它?

转载 作者:太空宇宙 更新时间:2023-11-03 23:33:47 25 4
gpt4 key购买 nike

我有一个项目,其中有很多我以前写过的难看的代码。现在我正在尝试使其可测试并使用 TDD 进行进一步开发。但每次我尝试为现有代码编写单元测试时,我都会遇到困难。我只是不知道如何测试我的旧代码。我不能写任何小测试。这让我不舒服。那么谁能告诉我应该为这样的函数编写哪些测试以使进一步的重构变得轻松:

public void ChangeHealth(UInt16 id, HealthTypes health, FighterCount count)
{
var uc = new FighterCommand {Health = health, KillerId = 1024};
Fighter f;
switch(count)
{
case FighterCount.All:
if (Fight.GetInstance().Status == FightStatuses.Enable)
{
foreach (var u in Fighters.Elements)
uc.AddUnit(u.Id);
}
FightEvents.StatusUnit(null, health);
_sender.SendCommand_AppServer(uc);
break;
case FighterCount.NotEqual:
for (var i = Fighters.Count - 1; i >= 0; i--)
{
f = Fighters.GetUnit(i);
if (health == f.Health) continue;
uc.AddUnit(f.Id);
FightEvents.StatusUnit(f, health);
}
if (uc.UnitCount > 0) _sender.SendCommand_AppServer(uc);
break;
default:
f = Fighters.GetById(id);
uc.AddUnit(f.Id);
FightEvents.StatusUnit(f, health);
_sender.SendCommand_AppServer(uc);
break;
}
}

最佳答案

看看 Michael Feathers 的“黄金大师”技术。这个想法是,您向无法测试的代码输入数据,记录输出或程序状态。然后您可以重构并抛出相同的输入并观察相同的输出或内部状态(除了您所做的微小增量更改之外)。一点一点地,代码变得更可测试。在 http://blog.thecodewhisperer.com/2014/09/28/surviving-legacy-code-with-golden-master-and-sampling/ 进一步深入解释

用于转储应用程序状态的工具是 https://github.com/kbilsted/StatePrinter你可以简单地说

var printer = new Stateprinter();
Console.WriteLine( printer.PrintObject( myProgram) );

关于c# - 如何为遗留代码编写测试然后重构它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31276462/

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