private void AccountsAreEqual(StorageConnectionString a, StorageConnectionString b)
        {
            // endpoints are the same
            Assert.AreEqual(a.BlobEndpoint, b.BlobEndpoint);
            Assert.AreEqual(a.QueueEndpoint, b.QueueEndpoint);
            Assert.AreEqual(a.TableEndpoint, b.TableEndpoint);
            Assert.AreEqual(a.FileEndpoint, b.FileEndpoint);

            // storage uris are the same
            Assert.AreEqual(a.BlobStorageUri, b.BlobStorageUri);
            Assert.AreEqual(a.QueueStorageUri, b.QueueStorageUri);
            Assert.AreEqual(a.TableStorageUri, b.TableStorageUri);
            Assert.AreEqual(a.FileStorageUri, b.FileStorageUri);

            // seralized representatons are the same.
            var aToStringNoSecrets   = a.ToString();
            var aToStringWithSecrets = a.ToString(true);
            var bToStringNoSecrets   = b.ToString(false);
            var bToStringWithSecrets = b.ToString(true);

            Assert.AreEqual(aToStringNoSecrets, bToStringNoSecrets);
            Assert.AreEqual(aToStringWithSecrets, bToStringWithSecrets);

            // credentials are the same
            if (a.Credentials != null && b.Credentials != null)
            {
                Assert.AreEqual(a.GetType(), b.GetType());

                // make sure
                if (a.Credentials != StorageConnectionString.DevelopmentStorageAccount.Credentials &&
                    b.Credentials != StorageConnectionString.DevelopmentStorageAccount.Credentials)
                {
                    StringAssert.AreNotEqualIgnoringCase(aToStringWithSecrets, bToStringNoSecrets);
                }
            }
            else if (a.Credentials == null && b.Credentials == null)
            {
                return;
            }
            else
            {
                Assert.Fail("credentials mismatch");
            }
        }