public async Task OnlyCallsMethodOncePerComplexObject() { var testCounter = new TestCounter(); var complexObject1 = new ComplexObjectTest() { Age = new DateTime(2018, 5, 2), Name = "Devedse", Timer = 600 }; var complexObject2 = new ComplexObjectTest() { Age = new DateTime(2018, 5, 2), Name = "Devedse", Timer = 601 }; var lss = new LineStateSaver(); await lss.Save(() => testCounter.ComplexCallAsync(complexObject1)); await lss.Save(() => testCounter.ComplexCallAsync(complexObject1)); await lss.Save(() => testCounter.ComplexCallAsync(complexObject2)); await lss.Save(() => testCounter.ComplexCallAsync(complexObject1)); await lss.Save(() => testCounter.ComplexCallAsync(complexObject1, complexObject2)); await lss.Save(() => testCounter.ComplexUnrelatedCallAsync(complexObject2)); Assert.Equal(2, testCounter.CallCount); Assert.Equal(1, testCounter.DoubleParametersCallCount); Assert.Equal(1, testCounter.ComplexUnrelatedCallCount); }