gpt4 book ai didi

c# - 单元测试 - 依赖测试

转载 作者:行者123 更新时间:2023-11-30 13:40:17 25 4
gpt4 key购买 nike

我正在创建一个相互依赖的单元测试列表。例如,我的第一个测试在数据库中创建一条记录并检查返回值是否大于 0。

然后第二个测试检查第一个测试中创建的记录的数据。但是,它需要在第一个测试中生成的记录的 ID。

最初我从第一个测试中调用第二个测试,以便我可以将 ID 作为参数传递,这工作正常,但这意味着实际上只有一个测试。

我创建了一个有序列表,其中在范围外声明了 ID,但在第一次单元测试后该值返回 0,因此显然第二次单元测试失败了。

有没有什么方法可以创建测试,以便它们共享第一个测试中产生的值(value)?

代码如下:

[TestMethod]
public void TestNewLandlord_InsertIntoImportFiles_ReturnFileID()
{
try
{
DataSet ds = EngineBllUtility.InsertIntoImportFiles(connString, @"C:\Documents and Settings\dTrunley\My Documents", "HFISNewLandlordTest.csv",
"TestNewLandlord()", WindowsIdentity.GetCurrent().Name, "HFIS Landlords", "NA", 30247531, false);

importFileId = long.Parse(ds.Tables[0].Rows[0]["ImportFileID"].ToString());
Assert.IsTrue(importFileId > 0);
}
catch (Exception ex)
{
Assert.Fail(ex.Message);
}
}

[TestMethod]
public void TestNewLandlord_InsertIntoImportFiles_CorrectData()
{
try
{
using (SqlConnection connectionString = new SqlConnection(connString))
{
using (SqlCommand sqlCommand = new SqlCommand(
String.Format("SELECT * FROM [mydeposits].[import].[ImportFiles] WHERE [ImportFileID] = {0}", importFileId), connectionString))
{
connectionString.Open();
using (SqlDataReader dr = sqlCommand.ExecuteReader())
{
if (dr.HasRows)
{
bool correctData = true;
dr.Read();
if (!dr["ImportFileStatusID"].ToString().Equals("1"))
correctData = false;
if (!dr["HeadOfficeMemberID"].ToString().Equals("247531"))
correctData = false;
Assert.IsTrue(correctData);
TestCleanup();
}
else
throw new Exception("Import does not exist in database");
}
}
}
}
catch (Exception ex)
{
Assert.Fail(ex.Message);
TestCleanup();
}
}

最佳答案

I am creating a list of unit tests that are dependent on each other. For example, my first test creates a record in the database and checks that the return value is greater than 0.

在我看来,这种做法是不正确的。你可能会创建邪恶的代码来反噬你。这样的代码:

  • 打破单元测试原则
  • 难以维护
  • 非常死板、繁琐且容易出错

单元测试必须独立,否则根本不写。原因是随着软件的复杂性增加——测试的复杂性也在增加。如果您有一个测试依赖于其他测试,则维护测试将成为一种负担。所以软件的成本增加了,但代码的质量却没有。如果您在测试之间没有依赖性——软件的复杂性并不重要,因为您可以单独测试每个单独的功能。

另一个优点是您可以并行运行测试。对于大型系统,重要的是持续集成(和部署)周期要快。通过并行运行测试,您可以显着加快发布周期。

建议的解决方案

您要完成的可能是集成测试。编写它们的一种方法是为此类测试创建一个单独的项目。每个测试仍将相互独立,但可能每个测试都需要一些 NUnit 测试术语中的 SetUpTearDown。因此,SetUp 将准备通过集成测试所需的一切,而 TearDown 将在每次测试后执行清理。

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

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