我已经为我的测试类重载了 Azure ICollector 接口(interface)。
但是,当创建收集器并添加数据时,初始化的两个收集器将被视为单个收集器。
下面是我的收集器类代码。
using System.Collections.Generic;
using Microsoft.Azure.WebJobs;
namespace ChangeFeedPublisherTests
{
class TestCollector<T> : ICollector<T>
{
public static List<T> Collector = new List<T>();
public void Add(T item)
{
Collector.Add(item);
}
public List<T> GetCollector()
{
return Collector;
}
}
}
两个收集器初始化如下,包括我的测试代码
var actualCollector = new TestCollector<String>();
var documents = new List<Document>();
Document document = CreateDocument();
var changedSubdocuments = new List<String>();
changedSubdocuments.Add("AlternateId");
document.SetPropertyValue(ChangedSubdocumentsPropertyName, changedSubdocuments);
documents.Add(document);
MessageHandler.Run(documents, actualCollector, logger);
var expectedCollector = new TestCollector<String>();
var changeFeedMessage = DocumentToChangeFeedMessage(document);
var cloudEvent = CreateCloudEvents(JObject.FromObject(changeFeedMessage));
expectedCollector.Add(JsonConvert.SerializeObject(cloudEvent));
var expectedCollection = expectedCollector.GetCollector();
var actualCollection = actualCollector.GetCollector();
Assert.AreEqual(expectedCollection, actualCollection);
Assert.AreEqual(expectedCollection.Count, 1);
Run函数将数据添加到收集器中。
当收集器被断言时,两个添加的数据都包含在两个收集器中,而不是每个收集器都添加一个数据。
最佳答案
那是因为你有
public static List<T> Collector = new List<T>();
它是静态的,因此在所有实例之间共享。
只需删除 static
关键字即可。
附注“重载”在这里不是正确的词:您“实现”了接口(interface),或者“模拟”/“伪造”了它。
P.P.S。最简单的实现如下所示:
class TestCollector<T> : ICollector<T>
{
public List<T> Collector => new List<T>();
public void Add(T item)
{
Collector.Add(item);
}
}
Collector
是只读的,您不需要冗余的 GetCollector
方法。
关于c# - Azure ICollector 重载不不同的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50831417/