c# - Azure ICollector 重载不不同的实例

标签 c# azure interface overloading azure-functions

我已经为我的测试类重载了 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/

相关文章:

c# - 为什么 Controller.UpdateModel 不使用单元测试中的全局化验证属性验证模型?

c# - Azure表存储: "Parameter count mismatch" storing array/list/IEnumerable

java - Java 中有 "local interface"这样的东西吗?

iphone - 高级 iOS 界面设计?

c# - Azure函数: HttpRequestMessage does not contain a definition for 'CreateResponse'

java - 如何从方面读取接口(interface)变量

c# - 拖放和两种形式。如何检测外部应用程序何时发生掉落

c# - 使用 Tuple 的 TRest 组件

c# - 无法找出具有多个和包含的泛型对象的 C# 泛型

azure - 在 Azure 移动服务中注册自定义库