public void SetCompleted_RaisesProgressChanged() { // Arrange var asyncCallbackCalled = false; var asyncCallbackCalled2 = false; var progress = 0; var progress2 = 0f; var op = new AsyncCompletionSource(); var pc = Substitute.For <IProgress <float> >(); op.ProgressChanged += (sender, args) => { asyncCallbackCalled = true; progress = args.ProgressPercentage; }; op.AddProgressCallback( p => { asyncCallbackCalled2 = true; progress2 = p; }, null); op.AddProgressCallback(pc, null); // Act op.SetCompleted(); // Assert Assert.True(asyncCallbackCalled); Assert.True(asyncCallbackCalled2); Assert.Equal(100, progress); Assert.Equal(1, progress2); pc.Received(1).Report(1); }