Unicorn.TAF logo Unicorn.TAF

Overview

The TafEvents class serves as the entry point for framework events in the Unicorn TAF. It provides a comprehensive event system for tracking test execution lifecycle, including suite-level, method-level, test-level, and step-level events.

Namespace: Unicorn.Taf.Core

Events

Suite Events

Event Delegate Description
OnSuiteStart UnicornSuiteEvent Invoked before suite execution
OnSuiteFinish UnicornSuiteEvent Invoked after suite execution
OnSuiteSkip UnicornSuiteEvent Invoked when suite is skipped

Suite Method Events

Event Delegate Description
OnSuiteMethodStart UnicornSuiteMethodEvent Invoked before suite method execution
OnSuiteMethodFinish UnicornSuiteMethodEvent Invoked after suite method execution
OnSuiteMethodPass UnicornSuiteMethodEvent Invoked when suite method passes
OnSuiteMethodFail UnicornSuiteMethodEvent Invoked when suite method fails

Test Events

Event Delegate Description
OnTestStart TestEvent Invoked before test execution
OnTestFinish TestEvent Invoked after test execution
OnTestPass TestEvent Invoked when test passes
OnTestFail TestEvent Invoked when test fails
OnTestSkip TestEvent Invoked when test is skipped

Step Events

Event Delegate Description
OnStepStart StepEvent Invoked before test step execution
OnStepFinish StepEvent Invoked after test step execution
OnStepFail StepFailEvent Invoked when test step fails

Usage Examples

Basic Event Subscription

public class TestEventHandlers
{
    public void RegisterHandlers()
    {
        TafEvents.OnTestStart += HandleTestStart;
        TafEvents.OnTestFinish += HandleTestFinish;
        TafEvents.OnTestPass += HandleTestPass;
        TafEvents.OnTestFail += HandleTestFail;
    }
    
    private void HandleTestStart(Test test)
    {
        Console.WriteLine($"Starting test: {test.Outcome.Title}");
    }
    
    private void HandleTestFinish(Test test)
    {
        Console.WriteLine($"Finished test: {test.Outcome.Title}, Duration: {test.Outcome.ExecutionTime}");
    }
    
    private void HandleTestPass(Test test)
    {
        Console.WriteLine($"Test passed: {test.Outcome.Title}");
    }
    
    private void HandleTestFail(Test test)
    {
        Console.WriteLine($"Test failed: {test.Outcome.Title}, Error: {test.Outcome.FailMessage}");
    }
}

Suite-Level Event Handling

public class SuiteEventLogger
{
    public SuiteEventLogger()
    {
        TafEvents.OnSuiteStart += LogSuiteStart;
        TafEvents.OnSuiteFinish += LogSuiteFinish;
        TafEvents.OnSuiteSkip += LogSuiteSkip;
    }
    
    private void LogSuiteStart(TestSuite suite)
    {
        Logger.LogInfo($"Suite {suite.Outcome.Name} started at {DateTime.Now}");
    }
    
    private void LogSuiteFinish(TestSuite suite)
    {
        Logger.LogInfo($"Suite {suite.Outcome.Name} completed. Passed: {suite.Outcome.PassedTests}, Failed: {suite.Outcome.FailedTests}");
    }
    
    private void LogSuiteSkip(TestSuite suite)
    {
        Logger.LogWarning($"Suite {suite.Outcome.Name} was skipped");
    }
}

Step Event Monitoring

public class StepMonitor
{
    public StepMonitor()
    {
        TafEvents.OnStepStart += (method, args) => 
        {
            Console.WriteLine($"Step started: {method.Name}");
            Console.WriteLine($"Arguments: {string.Join(", ", args)}");
        };
        
        TafEvents.OnStepFinish += (method, args) =>
        {
            Console.WriteLine($"Step completed: {method.Name}");
        };
        
        TafEvents.OnStepFail += (method, exception) =>
        {
            Console.WriteLine($"Step failed: {method.Name}");
            Console.WriteLine($"Error: {exception.Message}");
        };
    }
}

Test Results Reporting

public class TestReporter
{
    private int totalTests = 0;
    private int passedTests = 0;
    private int failedTests = 0;
    
    public TestReporter()
    {
        TafEvents.OnTestStart += (test) => totalTests++;
        TafEvents.OnTestPass += (test) => passedTests++;
        TafEvents.OnTestFail += (test) => failedTests++;
        TafEvents.OnSuiteFinish += GenerateReport;
    }
    
    private void GenerateReport(TestSuite suite)
    {
        Console.WriteLine($"=== Test Run Summary ===");
        Console.WriteLine($"Total: {totalTests}");
        Console.WriteLine($"Passed: {passedTests}");
        Console.WriteLine($"Failed: {failedTests}");
        Console.WriteLine($"Success Rate: {(double)passedTests / totalTests * 100}%");
    }
}

Unsubscribing from Events

public class DisposableEventHandler : IDisposable
{
    public DisposableEventHandler()
    {
        TafEvents.OnTestStart += HandleTestStart;
    }
    
    public void Dispose()
    {
        TafEvents.OnTestStart -= HandleTestStart;
    }
    
    private void HandleTestStart(Test test)
    {
        // Event handling logic
    }
}