c#单元测试货币验证



我需要编写一个单元测试来测试输入是否是有效的货币值。我已经尝试了几种方法,但我认为这不是测试货币价值的正确方法。

测试用例:

namespace validationUnitTest
{
    // Validation rule for checking if the input is a valid currency value
    public class CurrencyValidationRule: ValidationRule;
    {
        private static ValidationRule validationRule;
        /// Singleton instance of this <see cref="ValidationRule"/>
        public static ValidationRule Instance { get { return validationRule ?? (validationRule = new CurrencyValidationRule());  } }
        // performs validation checks on a value
        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            if (value is double) return ValidationResult.ValidResult;
            string stringValue = value as string;
            double result;
            return string.IsNullOrEmpty(stringValue) || double.TryParse(stringValue, NumberStyles.Currency, cultureInfo, out result) ? ValidationResult.ValidResult : new ValidationResult(false, "Value must be an number");
        }
    }

}

单元测试:

namespace validationUnitTest.Tests
{
[TestClass()]
public class CurrencyValidationRuleTests
{
    [TestMethod()]
    public void ValidateTest()
    {
        var test = new CurrencyValidationRule();
        var expected = new ValidationResult(true, true);
        var actual = test.Validate("0", null);
        Assert.AreEqual(expected.ErrorContent, actual.ErrorContent);
        Assert.AreEqual(expected.IsValid, actual.Isvalid);
        Assert.AreEqual(expected.GetHashCode(), actual.GetHashCode());
    }
}

}

关于我应该如何开始我的单元测试,或者我应该搜索什么有任何想法吗?我需要一些起点。任何东西我都很感激。

using System;
using System.Linq;
using Xunit;
using MonthlyStatements.Controllers;
using MonthlyStatements.Models;
using System.IO;
using System.Web.Mvc;
namespace UnitTestProject1
{
    public class UnitTest1
    {
        [Theory]
        [InlineData(10.20, "System.Double")]
        [InlineData(0, "System.Double")]
        public void checkValidation(double amt, string ExpectedResult)
        {
            //Arrange
            string actualResult = "";
            //Act
            //double doubleAmt = double.Parse(amt.ToString());
            actualResult = amt.GetType().ToString();
            //Assert
             Assert.Equal(ExpectedResult, actualResult);
        }
    }
}

使用Xunit而不是nUnit,在开始开发之前我们必须考虑以下

  1. 规则:1)我们只测试公共方法2)我们必须知道输入参数和输出参数如预期结果和实际结果

在上面的代码中你使用了3断言它是不正确的方式,这里你可以检查实际结果的数据类型,使用xunit [InlineData()],这样就不需要重复代码。

最新更新