NSubstitute Checking received calls don't work

点点圈 提交于 2019-12-08 01:06:36

问题


Hey guys im new with the NSubstitute framework. I'm trying to test some of my classes, but when i use NSubstitute to check received calls it says received no matching calls.

I'm trying to test if the method Tick() is receiving update() from track class.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ATM_System.Event;
using ATM_System.EventDetection;
using ATM_System.Region;
using ATM_System.Track;

namespace ATM_System
 {
public class ATM
{
    private List<ITrack> _tracks;
    private IRegion _region;
    private List<IEventDetection> _eventdetects;
    private List<IEvent> _events;

    public ATM()
    {
        _tracks = new List<ITrack>();
        _region = new Region.Region(100000,100000); //could be changed by user
        _events = new List<IEvent>();
        _eventdetects = new List<IEventDetection>();


    }



    public void Tick()
    {            

        // update track positions
        foreach (var track1 in _tracks)
        {
            track1.update();
        }

        //check for events
        foreach (var detector in _eventdetects)
        {
            _events.AddRange(detector.DetectEvent(_tracks));
        }

        //handle events and output
        foreach (var event1 in _events)
        {
            event1.HandleEvent();
            event1.LogEvent();
        }

    }

    public void IncomingTrack(ITrack track)
    {
        //add incoming track
        _tracks.Add(track);
    }
}
}

TEST FILE

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ATM_System.Event;
using ATM_System.EventDetection;
using ATM_System.Track;
using NUnit.Framework;
using NSubstitute;

namespace ATM_System.Tests.Unit
{
[TestFixture]
class ATMUnitTests
{

    private ATM _uut;
    private ITrack _track;
    private IEvent _event;
    private IEventDetection _eventDetection;

    [SetUp]
    public void Setup()
    {
        _track = Substitute.For<ITrack>();
        _event = Substitute.For<IEvent>();
        _eventDetection = Substitute.For<IEventDetection>();

        _uut = new ATM();
    }

    [Test]
    public void Tick_UpdateTracks_TracksUpdated()
    {
        _uut.Tick();
        _track.Received().update();
    }

}
}

回答1:


You forgot to include _track in notification receivers. It simply hasn't subscribed to event and as a result is not notified. To fix simply call your IncomingTrack method:

[Test]
public void Tick_UpdateTracks_TracksUpdated()
{
    _uut.IncomingTrack(_track);
    _uut.Tick();
    _track.Received().update();

}


来源:https://stackoverflow.com/questions/29346720/nsubstitute-checking-received-calls-dont-work

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!