- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - phát hiện rò rỉ bộ nhớ Ruby/Ruby on Rails
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
当您将 [Theory]
Và [InlineData]
一起使用时,它将为提供的每项内联数据创建一个测试。但是,如果您使用 [MemberData]
,它只会显示为一个测试。
有没有办法让 [MemberData]
测试显示为多个测试?
câu trả lời hay nhất
我花了很多时间试图在我的项目中解决这个问题。 This related Github discussion来自@NPadrutt 自己的帮助很大,但仍然令人困惑。
tl;dr 是这样的:[MemberInfo]
将报告单个组测试,除非为每个测试提供的对象可以通过实现 完全Tuần tự hóa và giải tuần tự hóa>IXunitSerializable
.
lý lịch
我自己的测试设置是这样的:
public static IEnumerable
正如预期的那样,测试运行了两次,一次针对来自 [MemberData]
的每个对象。正如@NPadrutt 所经历的,只有一个项目出现在测试资源管理器中,而不是两个。这是因为提供的对象 Impl.Client
不能被 xUnit 支持的任何一个接口(interface)序列化(稍后详细介绍)。
就我而言,我不想将测试问题渗入到我的主要代码中。我以为我可以围绕我的真实类编写一个瘦代理,让 xUnit 运行器误以为它可以序列化它,但是在与它战斗的时间比我愿意承认的要长之后,我意识到我不理解的部分是:
The objects aren't just serialized during discovery to count permutations; each object is also deserialized at test run time as the test starts.
因此,您使用 [MemberData]
提供的任何对象都必须支持完整的往返(反)序列化。现在这对我来说似乎很明显,但是在我试图弄明白的时候找不到任何相关文档。
giải pháp
确保每个对象(以及它可能包含的任何非原始对象)都可以完全序列化和反序列化。实现 xUnit 的 IXunitSerializable
告诉 xUnit 它是一个可序列化的对象。
如果像我的情况一样,您不想向主代码添加属性,一个解决方案是创建一个用于测试的可序列化的精简生成器类,它可以表示重新创建实际类所需的一切。这是上面的代码,在我让它工作之后:
测试客户端生成器
public class TestClientBuilder : IXunitSerializable
{
private string type;
// required for deserializer
public TestClientBuilder()
{
}
public TestClientBuilder(string type)
{
this.type = type;
}
public Impl.Client Build()
{
return new Impl.Client(type);
}
public void Deserialize(IXunitSerializationInfo info)
{
type = info.GetValue("type");
}
public void Serialize(IXunitSerializationInfo info)
{
info.AddValue("type", type, typeof(string));
}
public ghi đè chuỗi ToString()
{
return $"Type = {type}";
}
}
Bài kiểm tra
public static IEnumerable
有点烦人的是我不再注入(inject)目标对象,但这只是调用我的构建器的额外代码行。而且,我的测试通过了(并且出现了两次!),所以我没有提示。
关于c# - MemberData 测试显示为一个测试而不是多个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30574322/
thành viênDữ liệu
sự khác biệt là gì
Sự khác biệt giữa {@code memberData} và ? Có hai điểm khác biệt chính so với câu trả lời hay nhất về memberData trong JavaDoc: {@code ...} ngắn gọn hơn: dễ đọc (và dễ nhập hơn). {@mã số ..
当您将 [Theory] 与 [InlineData] 一起使用时,它将为提供的每项内联数据创建一个测试。但是,如果您使用 [MemberData],它只会显示为一个测试。 有没有办法让 [Membe
我在计算两次 C# Xunit 测试中来自静态类的计算数据时遇到了一些问题。 这将用于的实际生产代码要复杂得多,但后面的代码足以展示我所看到的问题。 在下面的代码中,我有一个随机生成的、延迟加载的 i
我正在编写一个 xunit 测试来测试根据空格分割句子的实用方法的功能。例如:输入:“谁去那里?”,输出:{“Who”,“goes”,“there”}字符串的集合/列表。 我尝试过以下操作 [
假设我有以下使用 xUnit 编写的测试用例: public static IEnumerable testValues = new List { new object[] {new doub
使用 xUnit.net,Theory 是否有可能使其 MemberData 源自派生类? public abstract class BaseTest { public abstract I
我正在尝试使用 xunit 的 MemberDataAttribute 返回键/值列表。 例如,像这样: [Theory] [MemberData("ValidCardData")] public v
Tôi là một lập trình viên xuất sắc, rất giỏi!