Как проверить, не было ли вызвано событие - PullRequest
0 голосов
/ 25 августа 2018

Я новичок в UnitTests и, следовательно, в Xunit.Я написал несколько тестов, но я застрял с тестированием событий.

Можно ли проверить, что с xunit не было вызвано ни одного события?


Я использовал этот пример для подготовки своих тестов.

Первый тест работает отлично.Для второго теста я ожидал что-то вроде «Assert.RaisesNoEvent»;Однако этот метод недоступен.

Есть ли другой способ проверить, что событие не было вызвано?


Пример кода

Class, где возникает событиекогда Property2 равно Set

public class Class 
{
    private int _property2;

    public event EventHandler RelevantPropertyChanged;
    public void OnRelevantPropertyChanged(EventArgs args){
        RelevantPropertyChanged?.Invoke(this, args);
    }

    public int Property1 { get; set; }
    public int Property2 { 
        get { return _property2; }
        set { 
            OnRelevantPropertyChanged(new EventArgs()); 
           _property2 = value; 
        } 
    }
}

TestClass определяет модульные тесты для Class

public class TestClass 
{

    [Fact]
    public void ChangeProperty2_RaisesEvent() 
    {
        var cl = new Class();
        var args = new EventArgs();

        var evt = Assert.RaisesAny<EventArgs>(
            h => cl.RelevantPropertyChanged += h,
            h => cl.RelevantPropertyChanged -= h,
            () => cl.Property2 = 5);

        Assert.NotNull(evt);
        Assert.Equal(cl, evt.Sender);
        Assert.Equal(args, evt.Arguments);
    }

    [Fact]
    public void ChangeProperty1_RaisesNoEvent()
    {
        var cl = new Class();
        Action code = () => cl.Property1 = 5;

        Assert.RaisesNoEvent(code);          //this is what I want to do
    }
}

1 Ответ

0 голосов
/ 25 августа 2018

Вы можете проверить, что событие не было вызвано, проверив, что EventHandler не был вызван:

[Fact]
public void ChangeProperty1_RaisesNoEvent()
{
    var instance = new Class();
    bool isInvoked = false;
    instance.RelevantPropertyChanged += (s, e) => isInvoked = true;

    Assert.False(isInvoked);
    instance.Property1 = 5;
    Assert.False(isInvoked);
}

Этот метод работает с любой структурой модульного тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...