簡體   English   中英

添加Moq會給我的測試帶來任何其他好處

[英]Will adding Moq give my tests any added benefits

我知道使用moq很棒,因為我有一個數據庫或想要模擬的某種類型的列表,但是對於這樣的事情有什么用嗎?

我的測試通過了,但是如果使用類似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不依賴任何服務類,因此您實際上並沒有要模擬的東西。 EncryptionSettingsDictionary<string, object>僅僅是數據結構,比模擬它們更容易構建。 因此,在這一點上,使用Moq毫無價值。

但是,假設您有另一個可以使用加密器(或任何其他加密器)的類,並且想要獨立於Encryptor2000進行單元測試。 在這種情況下,Moq可以使您輕松確保類使用適當的值調用Encrypt()方法,並查看當該Encrypt()方法返回各種值時會發生什么。 當您將服務接口注入到類中時,Moq就可以派上用場了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM