添加最小起订量会给我的测试带来任何额外的好处吗
Will adding Moq give my tests any added benefits
我知道使用最小起订量很棒我有一个数据库或某种我想模拟的列表但是它对这样的事情有什么用吗?
我的测试通过了,但如果使用最小起订量之类的东西可以使它们更易于阅读或更易于维护,我完全赞成。
[TestFixture]
public class UnitTest1
{
[Test]
public void encrypted_token_should_match()
{
var settings = new Encryptor2000.EncryptionSettings()
{
Secret = "1234"
};
var token = new Dictionary<string, object>()
{
{"1",1}
};
var hardcodedTokenValue = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyIxIjoxfQ.wqrYm4ADb_P9qR2uCQh-VU6xX1KG6FwoCX9N2J0QpqCPPYm-4vchy7xmMtdzQ1xtBfryTP4ztJHohyb50CmjYA";
var actualToken = new Encryptor2000(settings).Encrypt(token);
Assert.AreEqual(hardcodedTokenValue, actualToken);
}
[Test]
public void decrypted_token_should_match()
{
var settings = new Encryptor2000.EncryptionSettings()
{
Secret = "1234"
};
var token = new Dictionary<string, object>()
{
{"1",1}
};
var hardcodedTokenValue = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyIxIjoxfQ.wqrYm4ADb_P9qR2uCQh-VU6xX1KG6FwoCX9N2J0QpqCPPYm-4vchy7xmMtdzQ1xtBfryTP4ztJHohyb50CmjYA";
var actualToken = new Encryptor2000(settings).Decrypt(hardcodedTokenValue);
Assert.AreEqual(token, actualToken);
}
}
public class Encryptor2000 : IEncryptor<IDictionary<string, object>>
{
private readonly EncryptionSettings _settings;
public class EncryptionSettings
{
public string Secret { get; set; }
}
public Encryptor2000(EncryptionSettings settings)
{
_settings = settings;
}
public string Encrypt(IDictionary<string, object> token)
{
return JsonWebToken.Encode(token, _settings.Secret, JwtHashAlgorithm.HS512);
}
public IDictionary<string, object> Decrypt(string token)
{
return JsonWebToken.DecodeToObject(token, _settings.Secret, true) as IDictionary<string, object>;
}
}
public interface IEncryptor<T>
{
string Encrypt(T token);
}
Encryptor2000
不依赖于任何 service classes,所以你真的没有什么可以模拟的。 EncryptionSettings
和 Dictionary<string, object>
只是数据结构,构建起来比模拟起来更容易。所以此时,您会发现使用 Moq 没有任何价值。
但是,假设您有另一个 class 可能使用您的加密器(或任何其他加密器),并且您想要独立于 Encryptor2000
对 class 进行单元测试.在这种情况下,Moq 可以让您轻松确保 class 使用适当的值调用 Encrypt()
方法,并查看当 Encrypt()
方法 returns 各种值。当您将服务接口注入 class 时,这就是 Moq 派上用场的地方。
我知道使用最小起订量很棒我有一个数据库或某种我想模拟的列表但是它对这样的事情有什么用吗?
我的测试通过了,但如果使用最小起订量之类的东西可以使它们更易于阅读或更易于维护,我完全赞成。
[TestFixture]
public class UnitTest1
{
[Test]
public void encrypted_token_should_match()
{
var settings = new Encryptor2000.EncryptionSettings()
{
Secret = "1234"
};
var token = new Dictionary<string, object>()
{
{"1",1}
};
var hardcodedTokenValue = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyIxIjoxfQ.wqrYm4ADb_P9qR2uCQh-VU6xX1KG6FwoCX9N2J0QpqCPPYm-4vchy7xmMtdzQ1xtBfryTP4ztJHohyb50CmjYA";
var actualToken = new Encryptor2000(settings).Encrypt(token);
Assert.AreEqual(hardcodedTokenValue, actualToken);
}
[Test]
public void decrypted_token_should_match()
{
var settings = new Encryptor2000.EncryptionSettings()
{
Secret = "1234"
};
var token = new Dictionary<string, object>()
{
{"1",1}
};
var hardcodedTokenValue = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyIxIjoxfQ.wqrYm4ADb_P9qR2uCQh-VU6xX1KG6FwoCX9N2J0QpqCPPYm-4vchy7xmMtdzQ1xtBfryTP4ztJHohyb50CmjYA";
var actualToken = new Encryptor2000(settings).Decrypt(hardcodedTokenValue);
Assert.AreEqual(token, actualToken);
}
}
public class Encryptor2000 : IEncryptor<IDictionary<string, object>>
{
private readonly EncryptionSettings _settings;
public class EncryptionSettings
{
public string Secret { get; set; }
}
public Encryptor2000(EncryptionSettings settings)
{
_settings = settings;
}
public string Encrypt(IDictionary<string, object> token)
{
return JsonWebToken.Encode(token, _settings.Secret, JwtHashAlgorithm.HS512);
}
public IDictionary<string, object> Decrypt(string token)
{
return JsonWebToken.DecodeToObject(token, _settings.Secret, true) as IDictionary<string, object>;
}
}
public interface IEncryptor<T>
{
string Encrypt(T token);
}
Encryptor2000
不依赖于任何 service classes,所以你真的没有什么可以模拟的。 EncryptionSettings
和 Dictionary<string, object>
只是数据结构,构建起来比模拟起来更容易。所以此时,您会发现使用 Moq 没有任何价值。
但是,假设您有另一个 class 可能使用您的加密器(或任何其他加密器),并且您想要独立于 Encryptor2000
对 class 进行单元测试.在这种情况下,Moq 可以让您轻松确保 class 使用适当的值调用 Encrypt()
方法,并查看当 Encrypt()
方法 returns 各种值。当您将服务接口注入 class 时,这就是 Moq 派上用场的地方。