gpt4 book ai didi

c# - 如何处理测试方法中的当前数据?

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

在我的示例中,我有两种用于启用和禁用以及帐户的方法,我将为每一种方法编写一个测试方法。

问题是我必须考虑数据的原始状态并在测试后恢复它,即使是在示例数据库中,以保持数据的完整性以供下一次测试。

public void DisableAndEnableAccount()
{
var client = new GwIntegrationServiceSoapClient();

string userName = "admin";
Account account = client.GetAccountByUsername(userName);
int accountID = account.Id;

bool isActiveOrginalValue = account.IsActive;

if (isActiveOrginalValue)
{
client.DisableAccount(accountID);
account = client.GetAccountByUsername(userName);

Assert.IsFalse(account.IsActive);

client.EnableAccount(accountID);
account = client.GetAccountByUsername(userName);

Assert.IsTrue(account.IsActive);
}
else
{
client.EnableAccount(accountID);
account = client.GetAccountByUsername(userName);

Assert.IsTrue(account.IsActive);

client.DisableAccount(accountID);
account = client.GetAccountByUsername(userName);

Assert.IsFalse(account.IsActive);
}
}

我认为我的测试方法写得不好,知道如何处理这种情况吗?

最佳答案

您应该在测试中使用测试数据(测试用户帐户),而不是真实数据。 (事实上​​ ,强烈建议您为测试使用单独的测试数据库,而不是真正的实时生产数据库。)然后您可以在测试之前以任何需要的方式自由设置它。顺便说一句,建议在单独的 setUp() 方法(或在 JUnit 4 中用 @Before 注释的方法)中进行设置。

但是请注意,“经典”单元测试不应该依赖于外部实体,例如数据库或文件系统:它们应该专注于测试与世界其他部分隔离的一个单元(类、方法)。这通常通过 dependency injection 实现和 mocking ,即将它们隐藏在接口(interface)后面,以便在单元测试中,您可以提供一个虚拟实现,例如不连接到数据库,只是验证对它的调用和传递的参数。

测试整个集成系统仍然有用,只是它不是单元,而是集成测试。单元测试可以更细粒度,更容易理解和维护,而且速度更快,所以只要可以,最好从单元测试开始,然后一旦你确定较小的部分工作正常,就把一些集成测试放在一起来验证该系统端到端工作。

关于c# - 如何处理测试方法中的当前数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7160531/

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