2015-03-31 29 views
0

嘿傢伙即時通訊新的NSubstitute框架。我試圖測試我的一些課程,但是當我使用NSubstitute來檢查接收的電話時,它說沒有收到任何匹配的電話。NSubstitute檢查接收到的呼叫不起作用

我想測試如果方法Tick()從事件類接收LogEvent()和HandleEvent(...)。

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;//this list contains both Tracks and airpotrs 
    private IRegion _region; 
    private List<IEventDetection> _eventdetects; 
    private List<IEvent> _events; 



    public ATM(List<ITrack> airports, int region_size, List<IEventDetection> elist) 
    //Sets airports, regionsize, and eventdetectors 
    { 
     _tracks = airports; 
     _region = new Region.Region(region_size,region_size); 
     _events = new List<IEvent>(); 
     _eventdetects = elist; 

    } 

    public void Tick() //The tick function which is called each 250 ms 
    { 

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

     //check for events 
     foreach (var detector in _eventdetects) 
     { 
      _events.AddRange(detector.DetectEvent(_tracks)); //this is simple: add the event list that the "detectevent" will 
                  //will return to the _events list 
     } 

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

      event1.LogEvent(); 
     } 

    } 

    public void Addairport(Airport AP) 
    { 
     _tracks.Add(AP); 

    } 

    public void IncomingTrack(ITrack track) //is called from main function when a new track is entering the region 
    { 
     //add incoming track 
     _tracks.Add(track); 
    } 
} 
} 

測試文件

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 NSubstitute; 
using NUnit.Framework; 


namespace ATM_System.Tests.Unit 
{ 
[TestFixture] 
class ATMUnitTests 
{ 
    private ATM _uut; 
    private ITrack _track; 
    private IEvent _event; 
    private IEventDetection _eventDetection; 

    private int _rsize; 
    private List<ITrack> _tracks; 
    private List<IEventDetection> _eDetections; 


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

     _tracks = new List<ITrack>(); 
     _eDetections = new List<IEventDetection>(); 

     _uut = new ATM(_tracks, _rsize, _eDetections); 

    } 


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

    [Test] 
    public void Tick_LogEvent_EventLogged() 
    { 
     //HOW? 
    } 

} 
} 
+0

[NSubstitute Checking received calls does not work]可能重複(http://stackoverflow.com/questions/29346720/nsubstitute-checking-received-calls-dont-work) – forsvarir 2015-05-20 21:10:28

回答

0

您正試圖驗證您Tick方法上IEvent對象調用HandleEventLogEvent

爲了做到這一點,您需要模擬IEvent並以某種方式將該模擬傳遞給Tick方法。

一個可能的方法來做到這一點(在你當前的設計)是讓你的_eventDetection模擬返回IEvent模擬其DetectEvent方法。你保留對這個模擬的參考,並確認HandleEventLogEvent被調用。