C#单元测试货币验证

时间:2016-10-04 12:34:11

标签: c# validation unit-testing

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

测试案例:

//API to get slot for a particular date range
app.get('/listcapacity/:ticketid/:fromdate/:todate', function (req, res) {
  var id = req.params.ticketid;
  var fromdate = req.params.fromdate;
  var todate = req.params.todate;
  var result = {};
  var data_output = [];
  var asyncTasks = [];
  var currentDate = new Date(fromdate);
  var between = [];
  var end = new Date(todate);

  while (currentDate <= end) {
    var tempdate = new Date(currentDate).toISOString();
    var dump = tempdate.toString().split("T");
    between.push(dump[0]);
    currentDate.setDate(currentDate.getDate() + 1);
  }

  between.forEach(function (entry) {

    asyncTasks.push(function (callback) {
      client.exists(id + entry, function (err, reply) {
        if (reply === 1) {
          console.log("Found");
          client.get(id + entry, function (err, reply) {
            var output = JSON.parse(reply);
            data_output = data_output.concat(output);

            return callback();
          });
        } else {
          return callback();
        }
      });
    });

  });

  async.parallel(asyncTasks, function () {
    // All tasks are done now
    result['data'] = data_output;
    result['response'] = 1;
    result['message'] = 'vacancies list fetched successfully!';
    res.json(result);
  });

});

}

UNIT TEST:

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");
        }
    }

}

我应该如何开始我的单元测试,或者我应该搜索什么?我需要一些起点。任何事情都非常感激。

2 个答案:

答案 0 :(得分:1)

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);
        }
    }
}

答案 1 :(得分:0)

使用Xunit代替nUnit,在开始开发之前我们必须考虑以下

  1. 规则:1)我们只测试公共方法2)我们必须知道输入 参数和输出参数如预期结果和实际结果
  2. 在上面的代码中你使用3断言它是不正确的方式, 在这里你可以检查数据实际结果的类型,使用xunit [InlineData()]所以不需要重复代码。