public void AddExpiredTriggerPreventsCaching() { var cache = CreateCache(); string key = "myKey"; var obj = new object(); var callbackInvoked = new ManualResetEvent(false); var trigger = new TestTrigger() { IsExpired = true }; var result = cache.Set(key, context => { context.AddExpirationTrigger(trigger); context.RegisterPostEvictionCallback((subkey, value, reason, state) => { // TODO: Verify params var localCallbackInvoked = (ManualResetEvent)state; localCallbackInvoked.Set(); }, state: callbackInvoked); return(obj); }); Assert.Same(obj, result); // The created item should be returned, but not cached. Assert.True(trigger.IsExpiredWasCalled); Assert.False(trigger.ActiveExpirationCallbacksWasCalled); Assert.Null(trigger.Registration); Assert.True(callbackInvoked.WaitOne(100), "Callback"); result = cache.Get(key); Assert.Null(result); // It wasn't cached }
public void AbsoluteExpiration_WorksAcrossLink() { var clock = new TestClock(); var cache = CreateCache(clock); var obj = new object(); string key = "myKey"; string key1 = "myKey1"; var trigger = new TestTrigger() { ActiveExpirationCallbacks = true }; using (var link = cache.CreateLinkingScope()) { cache.Set(key, obj, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromSeconds(5))); cache.Set(key1, obj, new MemoryCacheEntryOptions().AddEntryLink(link)); } Assert.StrictEqual(obj, cache.Get(key)); Assert.StrictEqual(obj, cache.Get(key1)); clock.Add(TimeSpan.FromSeconds(10)); object value; Assert.False(cache.TryGetValue(key1, out value)); Assert.False(cache.TryGetValue(key, out value)); }
public void Test_Invoke_without_Param() { // テスト用データモック var propMock = new Mock <IDisposable>(); var argMock = new Mock <IDisposable>(); // テスト対象の準備 var target = new ObjectDisposeAction(); target.Object = propMock.Object; target.DisposeParameter = false; // テスト対象のアクションを呼び出すためのトリガ作成 var element = new DependencyObject(); var trigger = new TestTrigger(); trigger.Attach(element); trigger.Actions.Add(target); // アクションを呼び出すためにトリガ実行 trigger.Invoke(argMock.Object); // 呼び出し結果の検証 propMock.Verify(c => c.Dispose(), Times.Once()); argMock.Verify(c => c.Dispose(), Times.Never()); }
public void Test_Invoke_Multiple() { // テスト用データモック var propMock = new Mock <IDisposable>(); var argMock = new Mock <IDisposable>(); // テスト対象の準備 var target = new ObjectDisposeAction(); target.Object = propMock.Object; target.DisposeParameter = true; // テスト対象のアクションを呼び出すためのトリガ作成 var element = new DependencyObject(); var trigger = new TestTrigger(); trigger.Attach(element); trigger.Actions.Add(target); // アクションを2回実行させる trigger.Invoke(argMock.Object); trigger.Invoke(argMock.Object); // 呼び出し結果の検証 propMock.Verify(c => c.Dispose(), Times.Exactly(2)); argMock.Verify(c => c.Dispose(), Times.Exactly(2)); }
public void TriggerExpires_LinkedEntry() { var cache = CreateCache(); var obj = new object(); string key = "myKey"; string key1 = "myKey1"; var trigger = new TestTrigger() { ActiveExpirationCallbacks = true }; using (var link = cache.CreateLinkingScope()) { cache.Set(key, obj, new MemoryCacheEntryOptions().AddExpirationTrigger(trigger)); cache.Set(key1, obj, new MemoryCacheEntryOptions().AddEntryLink(link)); } Assert.StrictEqual(obj, cache.Get(key)); Assert.StrictEqual(obj, cache.Get(key1)); trigger.Fire(); object value; Assert.False(cache.TryGetValue(key1, out value)); Assert.False(cache.TryGetValue(key, out value)); }
public void Test_Invoke_DisposeError() { // テスト用データモック var propMock = new Mock <IDisposable>(); var argMock = new Mock <IDisposable>(); propMock.Setup(m => m.Dispose()).Throws(new Exception()); argMock.Setup(m => m.Dispose()).Throws(new Exception()); // テスト対象の準備 var target = new ObjectDisposeAction(); target.Object = propMock.Object; target.DisposeParameter = true; // テスト対象のアクションを呼び出すためのトリガ作成 var element = new DependencyObject(); var trigger = new TestTrigger(); trigger.Attach(element); trigger.Actions.Add(target); // アクションを呼び出すためにトリガ実行 new Action(() => trigger.Invoke(argMock.Object)).Should().NotThrow(); }
public void RemoveItemDisposesTriggerRegistration() { var cache = CreateCache(); string key = "myKey"; var obj = new object(); var callbackInvoked = new ManualResetEvent(false); var trigger = new TestTrigger() { ActiveExpirationCallbacks = true }; cache.Set(key, context => { context.AddExpirationTrigger(trigger); context.RegisterPostEvictionCallback((subkey, value, reason, state) => { // TODO: Verify params var localCallbackInvoked = (ManualResetEvent)state; localCallbackInvoked.Set(); }, state: callbackInvoked); return(obj); }); cache.Remove(key); Assert.NotNull(trigger.Registration); Assert.True(trigger.Registration.Disposed); Assert.True(callbackInvoked.WaitOne(100), "Callback"); }
public void GetWithImplicitLinkPopulatesTriggers() { var cache = CreateCache(); var obj = new object(); string key = "myKey"; string key1 = "myKey1"; Assert.Null(EntryLinkHelpers.ContextLink); IEntryLink link; using (link = cache.CreateLinkingScope()) { Assert.StrictEqual(link, EntryLinkHelpers.ContextLink); var trigger = new TestTrigger() { ActiveExpirationCallbacks = true }; cache.Set(key, obj, new MemoryCacheEntryOptions().AddExpirationTrigger(trigger)); } Assert.Null(EntryLinkHelpers.ContextLink); Assert.Equal(1, link.Triggers.Count()); Assert.Null(link.AbsoluteExpiration); cache.Set(key1, obj, new MemoryCacheEntryOptions().AddEntryLink(link)); }
public void GetWithLinkPopulatesTriggers() { var cache = CreateCache(); var obj = new object(); string key = "myKey"; string key1 = "myKey1"; var link = new EntryLink(); var trigger = new TestTrigger() { ActiveExpirationCallbacks = true }; cache.Set(key, link, context => { context.AddExpirationTrigger(trigger); return(obj); }); Assert.Equal(1, link.Triggers.Count()); Assert.Null(link.AbsoluteExpiration); cache.Set(key1, context => { context.AddEntryLink(link); return(obj); }); }
public void FireTriggerRemovesItem() { var cache = CreateCache(); string key = "myKey"; var obj = new object(); var callbackInvoked = new ManualResetEvent(false); var trigger = new TestTrigger() { ActiveExpirationCallbacks = true }; cache.Set(key, context => { context.AddExpirationTrigger(trigger); context.RegisterPostEvictionCallback((subkey, value, reason, state) => { // TODO: Verify params var localCallbackInvoked = (ManualResetEvent)state; localCallbackInvoked.Set(); }, state: callbackInvoked); return(obj); }); trigger.Fire(); var found = cache.TryGetValue(key, out obj); Assert.False(found); Assert.True(callbackInvoked.WaitOne(100), "Callback"); }
public DialogueTestDataController(TestTrigger trigger_, string charName_) { charName = charName_; SetTestData(); SetDefaultValues(); SetVocabIntro(vocab); myTestTrigger = trigger_; }
public DialogueTestDataController(TestTrigger trigger_, string[] vocab_, TestType testType_, string charName_) { charName = charName_; vocab = vocab_; SetDefaultValues(); myTestTrigger = trigger_; testType = testType_; }
public void Test_AutoEnable_Disable_to_Enable() { // AutoEnable=Disable -> Enable -> Disable // コマンドのモック var cmdMock = new TestCommand(); cmdMock.Setup_CanExecute(false); // リンク先要素 var element = new UIElement(); element.IsEnabled.Should().Be(true); // 初期状態を一応確認 // テスト対象の準備 var target = new InvokeCommandAction(); target.AutoEnable = false; // テスト対象のアクションを呼び出すためのトリガ作成&アタッチ var trigger = new TestTrigger(); trigger.Attach(element); trigger.Actions.Add(target); // コマンド設定 target.Command = cmdMock.Object; // コマンド実行可能状態変更(→true)して、変化無いことを確認 cmdMock.Setup_CanExecute(true); cmdMock.Raise_CanExecuteChanged(); element.IsEnabled.Should().Be(true); // 初期状態から変化無いこと // コマンド実行可能状態変更(→false)して、変化無いことを確認 cmdMock.Setup_CanExecute(false); cmdMock.Raise_CanExecuteChanged(); element.IsEnabled.Should().Be(true); // 初期状態から変化無いこと // リンク無効なので呼び出されないことの検証 cmdMock.Verify(c => c.CanExecute(It.IsAny <object>()), Times.Never()); // リンク有効化。状態反映される確認 target.AutoEnable = true; element.IsEnabled.Should().Be(false); // コマンド状態にリンク cmdMock.Verify(c => c.CanExecute(It.IsAny <object>()), Times.Once()); // 有効状態での状態変化のリンク cmdMock.Setup_CanExecute(true); cmdMock.Raise_CanExecuteChanged(); element.IsEnabled.Should().Be(true); // リンクして変化すること cmdMock.Setup_CanExecute(false); cmdMock.Raise_CanExecuteChanged(); element.IsEnabled.Should().Be(false); // リンクして変化すること }
public void ProcessDialogueNodeTest(string[] vocabArray) { EnableSubmitBtn(); SetSubmitBtnText("Submit answer"); TestTrigger testTrigger = new TestTrigger("Translating to English", DialogueIcon, TestTrigger.TriggerType.DialogueNode); currentDialogueTestData = new DialogueTestDataController(testTrigger, vocabArray, DialogueTestDataController.TestType.read, GetSpeakersName(currentNodeID)); InsertVocabTestNode(currentDialogueTestData.GetPlayerVocab()); DisplayGrammar(); InsertPlayerInputField(); }
public void Run_WithArgs_Fast() { int i = 0; var tt = new TestTrigger(); var em = ExecutionManager.CreateWithArgs <string>(async(x) => { i++; TestContext.WriteLine($"i: {i}"); Assert.AreEqual("XXX", x.Value); await Task.CompletedTask; }, tt).Run(); Assert.AreEqual(iterations, i); Assert.AreEqual(iterations, tt.Count); Assert.AreEqual(iterations, em.ExecutorCount); Assert.AreEqual(ExecutionManagerStopReason.TriggerStop, em.StopReason); }
public void Test_AutoEnable_Enable_SwitchCommand() { // AutoEnable=Enable -> Attach Element -> Set Command -> Switch Command // コマンドのモック var cmdMock = new TestCommand(); cmdMock.Setup_CanExecute(false); // リンク先要素 var element = new UIElement(); element.IsEnabled.Should().Be(true); // 初期状態を一応確認 // テスト対象の準備 var target = new InvokeCommandAction(); target.AutoEnable = true; // テスト対象のアクションを呼び出すためのトリガ作成 var trigger = new TestTrigger(); trigger.Attach(element); trigger.Actions.Add(target); // コマンド設定 target.Command = cmdMock.Object; using (var elementMon = element.Monitor()) { // 同じ状態の別コマンドのモック var otherCcmd1Mock = new TestCommand(); otherCcmd1Mock.Setup_CanExecute(false); // コマンド差し替え target.Command = otherCcmd1Mock.Object; // 状態は維持されるし、一時的な変化も生じていないこと element.IsEnabled.Should().Be(false); elementMon.Should().NotRaise(nameof(element.IsEnabledChanged)); // 別状態の別コマンドのモック var otherCmd2Mock = new TestCommand(); otherCmd2Mock.Setup_CanExecute(true); // コマンド差し替え target.Command = otherCmd2Mock.Object; // 差し替え後の状態を反映していること element.IsEnabled.Should().Be(true); elementMon.Should().Raise(nameof(element.IsEnabledChanged)); } }
public async Task Schedule(string nodeName, string uri, string testId, string requestId, string callBackUri) { HttpClient httpClient = new HttpClient(); var parameters = new TestTrigger { NodeName = nodeName, Id = testId, CallBackUrl = callBackUri, RequestId = requestId }; var stringContent = new StringContent(JsonConvert.SerializeObject(parameters)); stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var response = await httpClient.PostAsync(uri, stringContent); }
public void Run_WithArgs_Slow() { int i = 0; var tt = new TestTrigger(); var sw = Stopwatch.StartNew(); var em = ExecutionManager.CreateWithArgs <string>(async(x) => { i++; TestContext.WriteLine($"i: {i}"); Assert.AreEqual("XXX", x.Value); await Task.Delay(200); }, tt).Run(); sw.Stop(); Assert.IsTrue(sw.ElapsedMilliseconds > 2000, sw.ElapsedMilliseconds.ToString()); Assert.AreEqual(iterations, i); Assert.AreEqual(iterations, tt.Count); Assert.AreEqual(iterations, em.ExecutorCount); Assert.AreEqual(ExecutionManagerStopReason.TriggerStop, em.StopReason); }
public void Test_AutoEnable_Enable_AttachElem_SetCommand() { // AutoEnable=Enable -> Attach Element -> Set Command // コマンドのモック var cmdMock = new TestCommand(); cmdMock.Setup_CanExecute(true); // リンク先要素 var element = new UIElement(); element.IsEnabled.Should().Be(true); // 初期状態を一応確認 // テスト対象の準備 var target = new InvokeCommandAction(); target.AutoEnable = true; // テスト対象のアクションを呼び出すためのトリガ作成 var trigger = new TestTrigger(); trigger.Attach(element); trigger.Actions.Add(target); // コマンド設定 target.Command = cmdMock.Object; // リンク有効なのでアタッチ時点で呼び出しがあるはず cmdMock.Verify(c => c.CanExecute(It.IsAny <object>()), Times.AtLeastOnce()); // コマンド実行可能状態変更(→false)して、連携することを確認 cmdMock.Invocations.Clear(); cmdMock.Setup_CanExecute(false); cmdMock.Raise_CanExecuteChanged(); element.IsEnabled.Should().Be(false); // リンク有効なので呼び出しがあるはず cmdMock.Verify(c => c.CanExecute(It.IsAny <object>()), Times.AtLeastOnce()); // コマンド実行可能状態変更(→false)して、連携することを確認 cmdMock.Invocations.Clear(); cmdMock.Setup_CanExecute(true); cmdMock.Raise_CanExecuteChanged(); element.IsEnabled.Should().Be(true); // リンク有効なので呼び出しがあるはず cmdMock.Verify(c => c.CanExecute(It.IsAny <object>()), Times.AtLeastOnce()); }
public async Task <TestReport> Execute([FromBody] TestTrigger value) { var eagleEngine = new EagleEngine(typeof(TestClass)); var testSuites = eagleEngine.GetDiscoveredTestSuites(); IResultHandler handler = new HttpRequestResultHandler(testSuites, value.NodeName, value.RequestId, value.CallBackUrl); var result = await eagleEngine.ExecuteTest(handler, value.Id); return(new TestReport() { TestResults = result, TestSuites = testSuites, NodeName = value.NodeName, RequestId = value.RequestId, }); }
public void GetTriggersTest() { var trigger = new TestTrigger(); var triggers = Interaction.GetTriggers(testDependencyObject); Assert.IsNotNull(triggers); Assert.AreEqual(triggers.Count, 0); triggers = Interaction.GetTriggers(testDependencyObject); // for code coverage triggers.Add(trigger); Assert.AreEqual(triggers.Count, 1); Assert.AreEqual(trigger.AssociatedObject, testDependencyObject); triggers.Remove(trigger); Assert.AreEqual(triggers.Count, 0); }
public void SetWithLazyTriggerDoesntRegisterForNotification() { var cache = CreateCache(); string key = "myKey"; var value = new object(); var trigger = new TestTrigger() { ActiveExpirationCallbacks = false }; cache.Set(key, value, new MemoryCacheEntryOptions().AddExpirationTrigger(trigger)); Assert.True(trigger.IsExpiredWasCalled); Assert.True(trigger.ActiveExpirationCallbacksWasCalled); Assert.Null(trigger.Registration); }
public void LinkContextsCanNest() { var cache = CreateCache(); var obj = new object(); string key = "myKey"; string key1 = "myKey1"; var link1 = new EntryLink(); var link2 = new EntryLink(); Assert.Null(EntryLinkHelpers.ContextLink); using (link1.FlowContext()) { Assert.StrictEqual(link1, EntryLinkHelpers.ContextLink); using (link2.FlowContext()) { Assert.StrictEqual(link2, EntryLinkHelpers.ContextLink); var trigger = new TestTrigger() { ActiveExpirationCallbacks = true }; cache.Set(key, context => { context.AddExpirationTrigger(trigger); return(obj); }); } Assert.StrictEqual(link1, EntryLinkHelpers.ContextLink); } Assert.Null(EntryLinkHelpers.ContextLink); Assert.Equal(0, link1.Triggers.Count()); Assert.Null(link1.AbsoluteExpiration); Assert.Equal(1, link2.Triggers.Count()); Assert.Null(link2.AbsoluteExpiration); cache.Set(key1, context => { context.AddEntryLink(link2); return(obj); }); }
public void Serialization_CanBeSerializedAndDeserialized_NameAndGroupAndJobNameAndJobGroup() { BinaryFormatter binaryFormatter = new BinaryFormatter(); using (var ms = new MemoryStream()) { var trigger = new TestTrigger("TriggerName", "TriggerGroup", "JobName", "JobGroup"); binaryFormatter.Serialize(ms, trigger); ms.Position = 0; var deserializedTrigger = binaryFormatter.Deserialize(ms) as TestTrigger; Assert.That(deserializedTrigger, Is.Not.Null); Assert.That(deserializedTrigger, Is.TypeOf <TestTrigger>()); Assert.That(deserializedTrigger.JobKey, Is.Not.Null); Assert.That(deserializedTrigger.JobKey.Name, Is.EqualTo("JobName")); Assert.That(deserializedTrigger.JobKey.Group, Is.EqualTo("JobGroup")); Assert.That(deserializedTrigger.Key, Is.Not.Null); Assert.That(deserializedTrigger.Key.Name, Is.EqualTo("TriggerName")); Assert.That(deserializedTrigger.Key.Group, Is.EqualTo("TriggerGroup")); } using (var ms = new MemoryStream()) { var trigger = new TestTrigger { JobKey = new JobKey("JobName", "JobGroup"), Key = new TriggerKey("TriggerName", "TriggerGroup") }; binaryFormatter.Serialize(ms, trigger); ms.Position = 0; var deserializedTrigger = binaryFormatter.Deserialize(ms) as TestTrigger; Assert.That(deserializedTrigger, Is.Not.Null); Assert.That(deserializedTrigger, Is.TypeOf <TestTrigger>()); Assert.That(deserializedTrigger.JobKey, Is.Not.Null); Assert.That(deserializedTrigger.JobKey.Name, Is.EqualTo("JobName")); Assert.That(deserializedTrigger.JobKey.Group, Is.EqualTo("JobGroup")); Assert.That(deserializedTrigger.Key, Is.Not.Null); Assert.That(deserializedTrigger.Key.Name, Is.EqualTo("TriggerName")); Assert.That(deserializedTrigger.Key.Group, Is.EqualTo("TriggerGroup")); } }
public void HandleEvent() { //ARRANGE var i = new TestInitiator(); var t = new TestTrigger {Name = "Trigger"}; i.Workflow = new TestWorkFlow(); //ACT i.HandleEvent(OrgStore,"Object", "Event", t); //ASSERT Assert.AreEqual(1, i.ActionsPerformed.Count); Assert.AreEqual("Action", i.ActionsPerformed[0].Action); Assert.AreEqual("Object", i.ActionsPerformed[0].ObjectType); Assert.AreSame(i, (i.ActionsPerformed[0] as TestAction).Initiator); Assert.AreSame(t, (i.ActionsPerformed[0] as TestAction).Trigger); }
public void SetWithTriggerRegistersForNotificaiton() { var cache = CreateCache(); string key = "myKey"; var value = new object(); var trigger = new TestTrigger() { ActiveExpirationCallbacks = true }; cache.Set(key, value, new MemoryCacheEntryOptions().AddExpirationTrigger(trigger)); Assert.True(trigger.IsExpiredWasCalled); Assert.True(trigger.ActiveExpirationCallbacksWasCalled); Assert.NotNull(trigger.Registration); Assert.NotNull(trigger.Registration.RegisteredCallback); Assert.NotNull(trigger.Registration.RegisteredState); Assert.False(trigger.Registration.Disposed); }
public void ProcessAbilityTest(CharAbility ability) { //queuedAbility = ability; EnableSubmitBtn(); SetSubmitBtnText("Submit answer"); SetObjectPortrait(playerCharacter.GetCombatController().GetCurrentEnemyTarget().CharacterPortrait); SetDialogueReasonSymbol(ability.myIcon); InsertSpacer(); TestTrigger testTrigger = new TestTrigger(ability.GetMyName(), ability.GetMyIcon(), TestTrigger.TriggerType.Ability); currentDialogueTestData = new DialogueTestDataController(testTrigger, playerCharacter.CharacterName); GameObject dialogueNode = BuildDialogueNode(currentDialogueTestData.GetVocabIntro()); //text instruction to player InsertDialogueNode(dialogueNode); InsertVocabTestNode(currentDialogueTestData.GetPlayerVocab()); DisplayGrammar(); InsertPlayerInputField(); SetInUse(); }
public void Test_ParameterConverter_ModeAuto2() { // Mode=Auto, プロパティ設定あり時 // コマンドのモック var cmdMock = new TestCommand(); cmdMock.Setup_CanExecute(true); // コンバータのモック var convMock = new TestValueConverter(); convMock.Setup_Convert((value, t, param, c) => "test"); // パラメータ用データ var argParam = new object(); var propParam = new object(); // テスト対象の準備 var target = new InvokeCommandAction(); target.Command = cmdMock.Object; target.CommandParameterMode = InvokeCommandAction.CommandParameterModeKind.Auto; //target.CommandParameter = propParam; // プロパティ設定なし target.ParameterConverter = convMock.Object; // テスト対象のアクションを呼び出すためのトリガ作成 var element = new DependencyObject(); var trigger = new TestTrigger(); trigger.Attach(element); trigger.Actions.Add(target); // アクションを呼び出すためにトリガ実行 trigger.Invoke(argParam); // 呼び出し結果の検証 cmdMock.Verify(c => c.Execute(argParam), Times.Never()); cmdMock.Verify(c => c.Execute(propParam), Times.Never()); cmdMock.Verify(c => c.Execute("test"), Times.Once()); convMock.Verify(c => c.Convert(argParam, It.IsAny <Type>(), null, It.IsAny <CultureInfo>()), Times.Once()); }
public void NestedLinkContextsCanAggregate() { var clock = new TestClock(); var cache = CreateCache(clock); var obj = new object(); string key2 = "myKey2"; string key3 = "myKey3"; var trigger2 = new TestTrigger() { ActiveExpirationCallbacks = true }; var trigger3 = new TestTrigger() { ActiveExpirationCallbacks = true }; IEntryLink link1 = null; IEntryLink link2 = null; using (link1 = cache.CreateLinkingScope()) { cache.Set(key2, obj, new MemoryCacheEntryOptions() .AddExpirationTrigger(trigger2) .SetAbsoluteExpiration(TimeSpan.FromSeconds(10))); using (link2 = cache.CreateLinkingScope()) { cache.Set(key3, obj, new MemoryCacheEntryOptions() .AddExpirationTrigger(trigger3) .SetAbsoluteExpiration(TimeSpan.FromSeconds(15))); } } Assert.Equal(1, link1.Triggers.Count()); Assert.NotNull(link1.AbsoluteExpiration); Assert.Equal(clock.UtcNow + TimeSpan.FromSeconds(10), link1.AbsoluteExpiration); Assert.Equal(1, link2.Triggers.Count()); Assert.NotNull(link2.AbsoluteExpiration); Assert.Equal(clock.UtcNow + TimeSpan.FromSeconds(15), link2.AbsoluteExpiration); }
public void WhenInvokedWithAParameter_ThenOpensTheChildWindow() { var childWindow = new TestChildWindow { }; var action = new PopupChildWindowAction { ChildWindow = childWindow }; var trigger = new TestTrigger { Actions = { action } }; var args = new InteractionRequestedEventArgs(null, () => { }); trigger.InvokeActions(args); EnqueueConditional(() => childWindow.IsOpen); EnqueueCallback(() => { childWindow.Close(); }); EnqueueTestComplete(); }
public void SetWithLazyTriggerDoesntRegisterForNotification() { var cache = CreateCache(); string key = "myKey"; var obj = new object(); var trigger = new TestTrigger() { ActiveExpirationCallbacks = false }; cache.Set(key, context => { context.AddExpirationTrigger(trigger); return(obj); }); Assert.True(trigger.IsExpiredWasCalled); Assert.True(trigger.ActiveExpirationCallbacksWasCalled); Assert.Null(trigger.Registration); }