本文整理汇总了C#中IMessageSink.OnMessage方法的典型用法代码示例。如果您正苦于以下问题:C# IMessageSink.OnMessage方法的具体用法?C# IMessageSink.OnMessage怎么用?C# IMessageSink.OnMessage使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IMessageSink
的用法示例。
在下文中一共展示了IMessageSink.OnMessage方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: RunTests
/// <inheritdoc/>
protected override bool RunTests(IMessageSink messageSink, object[] constructorArguments, ExceptionAggregator aggregator)
{
bool cancelled = false;
if (!messageSink.OnMessage(new TestStarting { TestCase = this, TestDisplayName = DisplayName }))
cancelled = true;
else
{
try
{
lambda();
if (!messageSink.OnMessage(new TestPassed { TestCase = this, TestDisplayName = DisplayName }))
cancelled = true;
}
catch (Exception ex)
{
if (!messageSink.OnMessage(new TestFailed(ex) { TestCase = this, TestDisplayName = DisplayName }))
cancelled = true;
}
}
if (!messageSink.OnMessage(new TestFinished { TestCase = this, TestDisplayName = DisplayName }))
cancelled = true;
return cancelled;
}
示例2: Run
/// <inheritdoc/>
public void Run(IEnumerable<ITestCase> testMethods, IMessageSink messageSink)
{
bool cancelled = false;
var totalSummary = new RunSummary();
string currentDirectory = Directory.GetCurrentDirectory();
try
{
Directory.SetCurrentDirectory(Path.GetDirectoryName(assemblyInfo.AssemblyPath));
if (messageSink.OnMessage(new TestAssemblyStarting()))
{
var classGroups = testMethods.Cast<XunitTestCase>().GroupBy(tc => tc.Class).ToList();
if (classGroups.Count > 0)
{
var collectionSummary = new RunSummary();
if (messageSink.OnMessage(new TestCollectionStarting()))
{
foreach (var group in classGroups)
{
var classSummary = new RunSummary();
if (!messageSink.OnMessage(new TestClassStarting { ClassName = group.Key.Name }))
cancelled = true;
else
{
cancelled = RunTestClass(messageSink, group, classSummary);
collectionSummary.Aggregate(classSummary);
}
if (!messageSink.OnMessage(new TestClassFinished { Assembly = assemblyInfo, ClassName = group.Key.Name, TestsRun = classSummary.Total }))
cancelled = true;
if (cancelled)
break;
}
}
messageSink.OnMessage(new TestCollectionFinished { Assembly = assemblyInfo, TestsRun = collectionSummary.Total });
totalSummary.Aggregate(collectionSummary);
}
}
messageSink.OnMessage(new TestAssemblyFinished
{
Assembly = assemblyInfo,
TestsRun = totalSummary.Total,
TestsFailed = totalSummary.Failed,
TestsSkipped = totalSummary.Skipped,
ExecutionTime = totalSummary.Time
});
}
finally
{
Directory.SetCurrentDirectory(currentDirectory);
}
}
示例3: GetTestCollectionDefinitions
/// <summary>
/// Gets the test collection definitions for the given assembly.
/// </summary>
/// <param name="assemblyInfo">The assembly.</param>
/// <param name="diagnosticMessageSink">The message sink used to send diagnostic messages</param>
/// <returns>A list of mappings from test collection name to test collection definitions (as <see cref="ITypeInfo"/></returns>
public static Dictionary<string, ITypeInfo> GetTestCollectionDefinitions(IAssemblyInfo assemblyInfo, IMessageSink diagnosticMessageSink)
{
var attributeTypesByName =
assemblyInfo.GetTypes(false)
.Select(type => new { Type = type, Attribute = type.GetCustomAttributes(typeof(CollectionDefinitionAttribute).AssemblyQualifiedName).FirstOrDefault() })
.Where(list => list.Attribute != null)
.GroupBy(list => (string)list.Attribute.GetConstructorArguments().Single(),
list => list.Type,
StringComparer.OrdinalIgnoreCase);
var result = new Dictionary<string, ITypeInfo>();
foreach (var grouping in attributeTypesByName)
{
var types = grouping.ToList();
result[grouping.Key] = types[0];
if (types.Count > 1)
diagnosticMessageSink.OnMessage(new DiagnosticMessage("Multiple test collections declared with name '{0}': {1}",
grouping.Key,
string.Join(", ", types.Select(type => type.Name))));
}
return result;
}
示例4: ConditionalTestFramework
public ConditionalTestFramework(IMessageSink messageSink)
: base(messageSink)
{
messageSink.OnMessage(new DiagnosticMessage
{
Message = "Using " + nameof(ConditionalTestFramework)
});
}
示例5: RunTestsOnMethod
/// <inheritdoc />
protected override bool RunTestsOnMethod(IMessageSink messageSink,
Type classUnderTest,
object[] constructorArguments,
MethodInfo methodUnderTest,
List<BeforeAfterTestAttribute> beforeAfterAttributes,
ExceptionAggregator aggregator,
ref decimal executionTime)
{
try
{
var testMethod = Reflector.Wrap(methodUnderTest);
var dataAttributes = testMethod.GetCustomAttributes(typeof(DataAttribute));
foreach (var dataAttribute in dataAttributes)
{
var discovererAttribute = dataAttribute.GetCustomAttributes(typeof(DataDiscovererAttribute)).First();
var args = discovererAttribute.GetConstructorArguments().Cast<string>().ToList();
var discovererType = Reflector.GetType(args[0], args[1]);
IDataDiscoverer discoverer = (IDataDiscoverer)Activator.CreateInstance(discovererType);
foreach (object[] dataRow in discoverer.GetData(dataAttribute, testMethod))
if (RunTestWithArguments(messageSink, classUnderTest, constructorArguments, methodUnderTest, dataRow, GetDisplayNameWithArguments(DisplayName, dataRow), beforeAfterAttributes, aggregator, ref executionTime))
return true;
}
return false;
}
catch (Exception ex)
{
var cancelled = false;
if (!messageSink.OnMessage(new TestStarting { TestCase = this, TestDisplayName = DisplayName }))
cancelled = true;
else
{
if (!messageSink.OnMessage(new TestFailed(ex.Unwrap()) { TestCase = this, TestDisplayName = DisplayName }))
cancelled = true;
}
if (!messageSink.OnMessage(new TestFinished { TestCase = this, TestDisplayName = DisplayName }))
cancelled = true;
return cancelled;
}
}
示例6: RunTestsOnMethod
/// <inheritdoc />
protected override void RunTestsOnMethod(IMessageSink messageSink,
Type classUnderTest,
object[] constructorArguments,
MethodInfo methodUnderTest,
List<BeforeAfterTestAttribute> beforeAfterAttributes,
ExceptionAggregator aggregator,
CancellationTokenSource cancellationTokenSource,
ref decimal executionTime)
{
try
{
var testMethod = Reflector.Wrap(methodUnderTest);
var dataAttributes = testMethod.GetCustomAttributes(typeof(DataAttribute));
foreach (var dataAttribute in dataAttributes)
{
var discovererAttribute = dataAttribute.GetCustomAttributes(typeof(DataDiscovererAttribute)).First();
var args = discovererAttribute.GetConstructorArguments().Cast<string>().ToList();
var discovererType = Reflector.GetType(args[1], args[0]);
IDataDiscoverer discoverer = (IDataDiscoverer)Activator.CreateInstance(discovererType);
foreach (object[] dataRow in discoverer.GetData(dataAttribute, testMethod))
{
RunTestWithArguments(messageSink, classUnderTest, constructorArguments, methodUnderTest, dataRow, GetDisplayNameWithArguments(DisplayName, dataRow), beforeAfterAttributes, aggregator, cancellationTokenSource, ref executionTime);
if (cancellationTokenSource.IsCancellationRequested)
return;
}
}
}
catch (Exception ex)
{
if (!messageSink.OnMessage(new TestStarting(this, DisplayName)))
cancellationTokenSource.Cancel();
else
{
if (!messageSink.OnMessage(new TestFailed(this, DisplayName, executionTime, ex.Unwrap())))
cancellationTokenSource.Cancel();
}
if (!messageSink.OnMessage(new TestFinished(this, DisplayName, executionTime)))
cancellationTokenSource.Cancel();
}
}
示例7: Find
/// <inheritdoc/>
public void Find(bool includeSourceInformation, IMessageSink messageSink)
{
Guard.ArgumentNotNull("messageSink", messageSink);
ThreadPool.QueueUserWorkItem(_ =>
{
foreach (var type in assemblyInfo.GetTypes(includePrivateTypes: false))
if (!FindImpl(type, includeSourceInformation, messageSink))
break;
messageSink.OnMessage(new DiscoveryCompleteMessage());
});
}
示例8: RunTests
/// <inheritdoc/>
protected override void RunTests(IMessageSink messageSink, object[] constructorArguments, ExceptionAggregator aggregator, CancellationTokenSource cancellationTokenSource)
{
if (!messageSink.OnMessage(new TestStarting(this, DisplayName)))
cancellationTokenSource.Cancel();
else
{
try
{
lambda();
if (!messageSink.OnMessage(new TestPassed(this, DisplayName, 0)))
cancellationTokenSource.Cancel();
}
catch (Exception ex)
{
if (!messageSink.OnMessage(new TestFailed(this, DisplayName, 0, ex)))
cancellationTokenSource.Cancel();
}
}
if (!messageSink.OnMessage(new TestFinished(this, DisplayName, 0)))
cancellationTokenSource.Cancel();
}
示例9: Run
/// <inheritdoc/>
public async void Run(IEnumerable<ITestCase> testCases, IMessageSink messageSink)
{
var cancellationTokenSource = new CancellationTokenSource();
var totalSummary = new RunSummary();
string currentDirectory = Directory.GetCurrentDirectory();
try
{
Directory.SetCurrentDirectory(Path.GetDirectoryName(assemblyInfo.AssemblyPath));
if (messageSink.OnMessage(new TestAssemblyStarting(assemblyFileName, AppDomain.CurrentDomain.SetupInformation.ConfigurationFile, DateTime.Now,
String.Format("{0}-bit .NET {1}", IntPtr.Size * 8, Environment.Version),
XunitTestFrameworkDiscoverer.DisplayName)))
{
// TODO: Contract for Run() states that null "testCases" means "run everything".
var tasks =
testCases.Cast<XunitTestCase>()
.GroupBy(tc => tc.TestCollection)
.Select(collectionGroup => Task.Run(() => RunTestCollection(messageSink, collectionGroup.Key, collectionGroup, cancellationTokenSource)))
.ToArray();
var summaries = await Task.WhenAll(tasks);
totalSummary.Time = summaries.Sum(s => s.Time);
totalSummary.Total = summaries.Sum(s => s.Total);
totalSummary.Failed = summaries.Sum(s => s.Failed);
totalSummary.Skipped = summaries.Sum(s => s.Skipped);
}
messageSink.OnMessage(new TestAssemblyFinished(assemblyInfo, totalSummary.Time, totalSummary.Total, totalSummary.Failed, totalSummary.Skipped));
}
finally
{
Directory.SetCurrentDirectory(currentDirectory);
}
}
示例10: CreateInnerTestFramework
static ITestFramework CreateInnerTestFramework(Type testFrameworkType, IMessageSink diagnosticMessageSink)
{
try
{
var ctorWithSink = testFrameworkType.GetTypeInfo().DeclaredConstructors
.FirstOrDefault(ctor =>
{
var paramInfos = ctor.GetParameters();
return paramInfos.Length == 1 && paramInfos[0].ParameterType == typeof(IMessageSink);
});
if (ctorWithSink != null)
return (ITestFramework)ctorWithSink.Invoke(new object[] { diagnosticMessageSink });
return (ITestFramework)Activator.CreateInstance(testFrameworkType);
}
catch (Exception ex)
{
diagnosticMessageSink.OnMessage(new DiagnosticMessage($"Exception thrown during test framework construction: {ex.Unwrap()}"));
return new XunitTestFramework(diagnosticMessageSink);
}
}
示例11: RunAsync
// This method is called by the xUnit test framework classes to run the test case. We will do the
// loop here, forwarding on to the implementation in XunitTestCase to do the heavy lifting. We will
// continue to re-run the test until the aggregator has an error (meaning that some internal error
// condition happened), or the test runs without failure, or we've hit the maximum number of tries.
public override async Task<RunSummary> RunAsync(IMessageSink diagnosticMessageSink,
IMessageBus messageBus,
object[] constructorArguments,
ExceptionAggregator aggregator,
CancellationTokenSource cancellationTokenSource)
{
var runCount = 0;
while (true)
{
// This is really the only tricky bit: we need to capture and delay messages (since those will
// contain run status) until we know we've decided to accept the final result;
var delayedMessageBus = new DelayedMessageBus(messageBus);
var summary = await base.RunAsync(diagnosticMessageSink, delayedMessageBus, constructorArguments, aggregator, cancellationTokenSource);
if (aggregator.HasExceptions || summary.Failed == 0 || ++runCount >= maxRetries)
{
delayedMessageBus.Dispose(); // Sends all the delayed messages
return summary;
}
diagnosticMessageSink.OnMessage(new DiagnosticMessage("Execution of '{0}' failed (attempt #{1}), retrying...", DisplayName, runCount));
}
}
示例12: ReturnDiscoveryMessages
private void ReturnDiscoveryMessages(IMessageSink sink)
{
foreach (var testCase in DiscoveryTestCases)
sink.OnMessage(new TestCaseDiscoveryMessage { TestCase = testCase });
sink.OnMessage(new DiscoveryCompleteMessage());
}
示例13: RunTestWithArguments
/// <summary>
/// Runs a single test for a given test method.
/// </summary>
/// <param name="messageSink">The message sink to send results to.</param>
/// <param name="classUnderTest">The class under test.</param>
/// <param name="constructorArguments">The arguments to pass to the constructor.</param>
/// <param name="methodUnderTest">The method under test.</param>
/// <param name="testMethodArguments">The arguments to pass to the test method.</param>
/// <param name="displayName">The display name for the test.</param>
/// <param name="beforeAfterAttributes">The <see cref="BeforeAfterTestAttribute"/> instances attached to the test.</param>
/// <param name="parentAggregator">The parent aggregator that contains the exceptions up to this point.</param>
/// <param name="cancellationTokenSource">The cancellation token source that indicates whether cancellation has been requested.</param>
/// <param name="executionTime">The time spent executing the tests.</param>
protected void RunTestWithArguments(IMessageSink messageSink,
Type classUnderTest,
object[] constructorArguments,
MethodInfo methodUnderTest,
object[] testMethodArguments,
string displayName,
List<BeforeAfterTestAttribute> beforeAfterAttributes,
ExceptionAggregator parentAggregator,
CancellationTokenSource cancellationTokenSource,
ref decimal executionTime)
{
var aggregator = new ExceptionAggregator(parentAggregator);
if (!messageSink.OnMessage(new TestStarting(this, displayName)))
cancellationTokenSource.Cancel();
else
{
if (!String.IsNullOrEmpty(SkipReason))
{
if (!messageSink.OnMessage(new TestSkipped(this, displayName, SkipReason)))
cancellationTokenSource.Cancel();
}
else
{
var beforeAttributesRun = new Stack<BeforeAfterTestAttribute>();
var stopwatch = Stopwatch.StartNew();
if (!aggregator.HasExceptions)
aggregator.Run(() =>
{
object testClass = null;
if (!methodUnderTest.IsStatic)
{
if (!messageSink.OnMessage(new TestClassConstructionStarting(this, displayName)))
cancellationTokenSource.Cancel();
try
{
if (!cancellationTokenSource.IsCancellationRequested)
testClass = Activator.CreateInstance(classUnderTest, constructorArguments);
}
finally
{
if (!messageSink.OnMessage(new TestClassConstructionFinished(this, displayName)))
cancellationTokenSource.Cancel();
}
}
if (!cancellationTokenSource.IsCancellationRequested)
{
aggregator.Run(() =>
{
foreach (var beforeAfterAttribute in beforeAfterAttributes)
{
var attributeName = beforeAfterAttribute.GetType().Name;
if (!messageSink.OnMessage(new BeforeTestStarting(this, displayName, attributeName)))
cancellationTokenSource.Cancel();
else
{
try
{
beforeAfterAttribute.Before(methodUnderTest);
beforeAttributesRun.Push(beforeAfterAttribute);
}
finally
{
if (!messageSink.OnMessage(new BeforeTestFinished(this, displayName, attributeName)))
cancellationTokenSource.Cancel();
}
}
if (cancellationTokenSource.IsCancellationRequested)
return;
}
if (!cancellationTokenSource.IsCancellationRequested)
{
var parameterTypes = methodUnderTest.GetParameters().Select(p => p.ParameterType).ToArray();
var oldSyncContext = SynchronizationContext.Current;
try
{
var asyncSyncContext = new AsyncTestSyncContext();
SetSynchronizationContext(asyncSyncContext);
aggregator.Run(() =>
//.........这里部分代码省略.........
示例14: Run
/// <summary>
/// Executes the test case, returning 0 or more result messages through the message sink.
/// </summary>
/// <param name="messageSink">The message sink to report results to.</param>
/// <param name="constructorArguments">The arguments to pass to the constructor.</param>
/// <param name="aggregator">The error aggregator to use for catching exception.</param>
/// <param name="cancellationTokenSource">The cancellation token source that indicates whether cancellation has been requested.</param>
public virtual void Run(IMessageSink messageSink, object[] constructorArguments, ExceptionAggregator aggregator, CancellationTokenSource cancellationTokenSource)
{
int totalFailed = 0;
int totalRun = 0;
int totalSkipped = 0;
decimal executionTime = 0M;
if (!messageSink.OnMessage(new TestCaseStarting(this)))
cancellationTokenSource.Cancel();
else
{
var delegatingSink = new DelegatingMessageSink(messageSink, msg =>
{
if (msg is ITestResultMessage)
{
totalRun++;
executionTime += ((ITestResultMessage)msg).ExecutionTime;
}
if (msg is ITestFailed)
totalFailed++;
if (msg is ITestSkipped)
totalSkipped++;
});
RunTests(delegatingSink, constructorArguments, aggregator, cancellationTokenSource);
}
if (!messageSink.OnMessage(new TestCaseFinished(this, executionTime, totalRun, totalFailed, totalSkipped)))
cancellationTokenSource.Cancel();
}
示例15: Find
/// <inheritdoc/>
public void Find(bool includeSourceInformation, IMessageSink messageSink)
{
Guard.ArgumentNotNull("messageSink", messageSink);
ThreadPool.QueueUserWorkItem(_ =>
{
foreach (var type in assemblyInfo.GetTypes(includePrivateTypes: false))
if (!FindImpl(type, includeSourceInformation, messageSink))
break;
var warnings = messageAggregator.GetAndClear<EnvironmentalWarning>().Select(w => w.Message).ToList();
messageSink.OnMessage(new DiscoveryCompleteMessage(warnings));
});
}