【发布时间】:2021-06-27 16:01:41
【问题描述】:
我过去曾问过几个与此相关的基本问题,并得到很好的答案来解释几个问题。我想我现在可以提出正确的问题了,因为我更加了解 Xunit 的工作原理!
我正在尝试使用 Visual Studio 对 C# 中的几个测试进行参数化。我需要将每个参数显示为单独的测试,如果需要可以单独运行(我知道有一个测试收集运行器和一个单独的测试运行器)。测试集合运行器是我的问题。
我知道 Xunit 需要对参数进行序列化,以便它们被测试收集运行程序拾取。我也知道它默认可以轻松序列化基本数据类型,如字符串、布尔值、整数等。
我尝试了各种方法来做到这一点,但结果好坏参半。我的问题是尝试参数化 Selenium 类型“By”。我似乎无法序列化这个。我试图欺骗 Xunit,例如使用字典 List
这是我遇到的最简洁的代码,它对于我正在尝试做的事情来说既简单又优雅,但我再次无法序列化“By”类型。我已经尝试将静态属性从 bool 更改为 By 并且它只返回所有参数的 1 个测试,所以它没有被序列化
public class ParamTest1
{
static string test3 = "TestXYZ";
public static TheoryData<int, bool, string, string> DataForTest1 = new TheoryData<int, bool, string, string>
{
{ 1, true, "First", test3 },
{ 2, false, "Second", test3},
{ 3, true, "Third", test3}
};
[Theory(DisplayName = "My First Test"), MemberData(nameof(DataForTest1))]
public void Test1(int valA, bool valB, string valC, string valD)
{
Assert.True(valB);
}
}
我知道这个特定的代码没有调用 IXunitSerializable
所以这是我需要的另一个工作示例,但我无法让它与“按”类型一起使用
public class ValidateTestCase : IXunitSerializable
{
public Guid Coupon { get; set; }
public bool IsValid { get; set; }
public void Serialize(IXunitSerializationInfo info)
{
info.AddValue(nameof(Coupon), Coupon.ToString());
}
public void Deserialize(IXunitSerializationInfo info) { }
}
public class Testing
{
public static IEnumerable<object[]> ValidateTestCases
{
get
{
yield return new object[] { new ValidateTestCase { Coupon = Guid.Parse("73e4d185-70cf-4ce4-bc3f-187b7a40e167"), IsValid = false } };
yield return new object[] { new ValidateTestCase { Coupon = Guid.Parse("93b983fb-5b6a-4845-a769-db41900b7df9"), IsValid = false } };
yield return new object[] { new ValidateTestCase { Coupon = Guid.Parse("99c03283-33cb-4e56-a010-c2bc0758ad27"), IsValid = false } };
yield return new object[] { new ValidateTestCase { Coupon = Guid.Parse("16a7fe80-3111-44b0-9ebf-c7159bea637d"), IsValid = false } };
yield return new object[] { new ValidateTestCase { Coupon = Guid.Parse("8b38b4aa-d70f-4ce7-8992-8a60936c5c58"), IsValid = false } };
yield return new object[] { new ValidateTestCase { Coupon = Guid.Parse("abc60aa0-a33b-4057-8f99-5cdceda35c70"), IsValid = true } };
}
}
[Theory(DisplayName = "CouponService should validate coupons")]
[MemberData(nameof(ValidateTestCases))]
public void MyCouponService_Validates(ValidateTestCase vtc)
{
Assert.Equal(vtc.IsValid, true);
}
}
最后,对于任何想知道“By”类型是什么的人,我指的是: [![在此处输入图片描述][2]][2]
它在调试器中,所以你可以看到里面发生了什么: [![在此处输入图片描述][3]][3]
我知道那里发生了很多事情,但如果有人有任何想法或建议,那就太好了!
总而言之,我无法参数化 Selenium 的“数据类型”。 [2]:https://i.stack.imgur.com/XcLcn.png [3]:https://i.stack.imgur.com/T9so1.png
【问题讨论】:
标签: selenium serialization xunit