【发布时间】:2019-11-20 00:47:42
【问题描述】:
我有这个测试类:
using NSubstitute;
using NUnit.Framework;
using System;
using System.Linq.Expressions;
namespace MyTests
{
public class Tests
{
[Test]
public void Test()
{
var companyBL = Substitute.For<ICompanyBL>();
companyBL.GetCompany(c => new { c.RegionID }).ReturnsForAnyArgs(new
{
RegionID = 4,
});
var company = companyBL.GetCompany(c => new { c.RegionID });
var dataRetriever = new DataRetriever(companyBL);
}
}
}
这个代码在另一个项目中:
namespace MyTests
{
using System;
using System.Linq.Expressions;
public interface ICompanyBL
{
T GetCompany<T>(Expression<Func<Company, T>> selector);
}
public partial class Company
{
public int RegionID { get; set; }
}
public class DataRetriever
{
public DataRetriever(ICompanyBL companyBL)
{
//This is null:
var company = companyBL.GetCompany(c => new
{
c.RegionID
});
}
}
}
company 变量是 null。
但是,当代码全部包含在同一个项目的同一个.cs文件中时,该值不是null。
为什么在另一个项目的另一个文件中使用null的值?
NSubstitute 版本 = 1.10.0.0。
.NET 框架版本 = 4.5.2。
在 Github 中提交的问题: https://github.com/nsubstitute/NSubstitute/issues/598
【问题讨论】:
-
ICompanyBL的自定义模拟应该可以解决这个问题,因为它不像 NSubstitute 那样基于传递参数的类型
标签: c# unit-testing nunit nsubstitute