您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

88 行
2.6 KiB

using System;
using NUnit.Framework;
using Unity.Multiplayer.Samples.BossRoom.Shared.Infrastructure;
using UnityEngine;
namespace Unity.Multiplayer.Samples.BossRoom.Tests.Runtime
{
public class MessageChannelTests
{
struct EmptyMessage { }
int m_NbSubscribers = 2;
int m_NbMessagesReceived;
IDisposable SubscribeToChannel(MessageChannel<EmptyMessage> channel)
{
var subscriptions = new DisposableGroup();
subscriptions.Add(channel.Subscribe(Subscription1));
subscriptions.Add(channel.Subscribe(Subscription2));
return subscriptions;
}
void Subscription1(EmptyMessage message)
{
m_NbMessagesReceived++;
}
void Subscription2(EmptyMessage message)
{
m_NbMessagesReceived++;
}
[SetUp]
public void Setup()
{
m_NbMessagesReceived = 0;
}
[Test]
public void MessagePublishedIsReceivedByAllSubscribers()
{
var messageChannel = new MessageChannel<EmptyMessage>();
var subscriptions = SubscribeToChannel(messageChannel);
messageChannel.Publish(new EmptyMessage());
Assert.AreEqual(m_NbSubscribers, m_NbMessagesReceived);
subscriptions.Dispose();
}
[Test]
public void MessagePublishedIsNotReceivedByAllSubscribersAfterUnsubscribing()
{
var messageChannel = new MessageChannel<EmptyMessage>();
var subscriptions = SubscribeToChannel(messageChannel);
messageChannel.Publish(new EmptyMessage());
Assert.AreEqual(m_NbSubscribers, m_NbMessagesReceived);
m_NbMessagesReceived = 0;
subscriptions.Dispose();
messageChannel.Publish(new EmptyMessage());
Assert.AreEqual(0, m_NbMessagesReceived);
}
[Test]
public void MessagePublishedIsReceivedByAllSubscribersAfterResubscribing()
{
var messageChannel = new MessageChannel<EmptyMessage>();
var subscriptions = SubscribeToChannel(messageChannel);
messageChannel.Publish(new EmptyMessage());
Assert.AreEqual(m_NbSubscribers, m_NbMessagesReceived);
m_NbMessagesReceived = 0;
subscriptions.Dispose();
subscriptions = SubscribeToChannel(messageChannel);
messageChannel.Publish(new EmptyMessage());
Assert.AreEqual(m_NbSubscribers, m_NbMessagesReceived);
subscriptions.Dispose();
}
}
}