private static void AssertEqual(Dictionary <string, object> expected, AttributesTable actual) { // test everything after a serialize + deserialize round-trip ExpectedAndActual.RoundTrip(ref expected, ref actual); Assert.That(actual.Count, Is.EqualTo(expected.Count)); Assert.That(actual, Is.EquivalentTo(expected)); Assert.That(actual.GetNames().Count, Is.EqualTo(expected.Keys.Count)); Assert.That(actual.GetNames(), Is.EquivalentTo(expected.Keys)); Assert.That(actual.GetValues().Count, Is.EqualTo(expected.Values.Count)); Assert.That(actual.GetValues(), Is.EquivalentTo(expected.Values)); foreach ((string key, object value) in expected) { Assert.That(actual.Exists(key)); Assert.That(actual[key], Is.EqualTo(value)); object retrieved = actual.GetOptionalValue(key); Assert.That(retrieved, Is.EqualTo(value)); Assert.That(actual.GetType(key), Is.EqualTo(value?.GetType() ?? typeof(object))); } }