.net 使用moq在xunit中更新操作
我试图使用xunit和moq存储库进行更新,但我的代码没有更新更改。我不确定我写的更新代码是否正确。你能帮我做同样的吗.net 使用moq在xunit中更新操作,.net,asp.net-core,moq,xunit.net,.net,Asp.net Core,Moq,Xunit.net,我试图使用xunit和moq存储库进行更新,但我的代码没有更新更改。我不确定我写的更新代码是否正确。你能帮我做同样的吗 [Fact] private async void SetPortfolioCompanyStatusAsync() { int _id = 1; var mockUserRepository = new Mock<IPortfolioCompanyManagement>(); var mockUserRepository1 = new Mo
[Fact]
private async void SetPortfolioCompanyStatusAsync()
{
int _id = 1;
var mockUserRepository = new Mock<IPortfolioCompanyManagement>();
var mockUserRepository1 = new Mock<IUserManagement>();
mockUserRepository.Setup(c => c.GetPortfolioCompanies( It.IsAny<CancellationToken>())).Returns(Task.FromResult(moqData.portfolioCompanies));
mockUserRepository.Setup(m => m.UpdatePortfolioCompany(moqData.portfolioCompanies[0], It.IsAny<CancellationToken>())).ReturnsAsync(moqData.portfolioCompanies[0]);
PortfolioCompany product = new PortfolioCompany()
{
Id = 1,
Name = "Test Private Company 1",//change data
DealCode = "PRIV1",
IsActive = false,
IsPrivate = true
};
var controller = new UsersController(mockUserRepository1.Object, mockUserRepository.Object);
var result1 = await controller.SetPortfolioCompanyStatus(product, It.IsAny<CancellationToken>());//this always returns null. Expected to return the updated value.
var result = controller.GetAllPortfolioCompanies( It.IsAny<CancellationToken>());
var z = result.Result.Value.Count();
}
[事实]
私有异步void SetPortfolioCompanyStatusAsync()
{
int _id=1;
var mockUserRepository=new Mock();
var mockUserRepository1=new Mock();
mockUserRepository.Setup(c=>c.GetPortfolioCompanies(It.IsAny()).Returns(Task.FromResult(moqData.portfolioCompanies));
mockUserRepository.Setup(m=>m.UpdatePortfolioCompany(moqData.portfolioCompanies[0],It.IsAny()).ReturnsAsync(moqData.portfolioCompanies[0]);
PortfolioCompany产品=新PortfolioCompany()
{
Id=1,
Name=“测试私人公司1”,//更改数据
DealCode=“PRIV1”,
IsActive=false,
IsPrivate=true
};
var controller=newuserscocontroller(mockUserRepository1.Object,mockUserRepository.Object);
var result1=await controller.SetPortfolioCompanyStatus(product,It.IsAny());//这始终返回null。应返回更新后的值。
var result=controller.GetAllPortfolioCompanies(It.IsAny());
var z=result.result.Value.Count();
}
我的模拟数据如下所示:
using System;
using System.Collections.Generic;
using System.Text;
using ValuationsReporting.Models;
namespace ValuationsReporting.Tests
{
public partial class MoqData
{
public List<PortfolioCompany> portfolioCompanies = new List<PortfolioCompany> {
new PortfolioCompany
{
Id=1,
Name = "Test Private Company 1",
DealCode = "PRIV1",
IsActive = true,
IsPrivate = true
},
new PortfolioCompany
{
Id=2,
Name = "Test Public Company 1",
DealCode = "PUBL1",
IsActive = true,
IsPrivate = false
},
new PortfolioCompany
{
Id=3,
Name = "Test Private Company 2",
DealCode = "PRIV2",
IsActive = true,
IsPrivate = true
},
new PortfolioCompany
{
Id=4,
Name = "Test Public Company 2",
DealCode = "PUBL2",
IsActive = true,
IsPrivate = false
},
new PortfolioCompany
{
Id=5,
Name = "Test Private Company 3",
DealCode = "PRIV3",
IsActive = false,
IsPrivate = true
},
new PortfolioCompany
{
Id=6,
Name = "Test Public Company 3",
DealCode = "PUBL3",
IsActive = false,
IsPrivate = false
}
};
}
}
使用系统;
使用System.Collections.Generic;
使用系统文本;
使用估价报告模型;
命名空间评估报告.Tests
{
公共部分类MoqData
{
公共列表组合公司=新列表{
新Portfolio公司
{
Id=1,
Name=“测试私人公司1”,
DealCode=“PRIV1”,
IsActive=true,
IsPrivate=true
},
新Portfolio公司
{
Id=2,
Name=“测试上市公司1”,
DealCode=“PUBL1”,
IsActive=true,
IsPrivate=false
},
新Portfolio公司
{
Id=3,
Name=“测试私人公司2”,
DealCode=“PRIV2”,
IsActive=true,
IsPrivate=true
},
新Portfolio公司
{
Id=4,
Name=“测试上市公司2”,
DealCode=“PUBL2”,
IsActive=true,
IsPrivate=false
},
新Portfolio公司
{
Id=5,
Name=“测试私人公司3”,
DealCode=“PRIV3”,
IsActive=false,
IsPrivate=true
},
新Portfolio公司
{
Id=6,
Name=“测试上市公司3”,
DealCode=“PUBL3”,
IsActive=false,
IsPrivate=false
}
};
}
}
我的控制器代码如下:
public async Task<ActionResult<PortfolioCompany>> SetPortfolioCompanyStatus([FromBody] PortfolioCompany portfolioCompany, CancellationToken cancellationToken = default(CancellationToken))
{
if (portfolioCompany == null)
throw new ArgumentNullException(nameof(portfolioCompany));
if (portfolioCompany.Id <= 0)
throw new ArgumentOutOfRangeException(nameof(portfolioCompany.Id));
var z = await _portfolioCompanyManagement.UpdatePortfolioCompany(portfolioCompany, cancellationToken);
return await _portfolioCompanyManagement.UpdatePortfolioCompany(portfolioCompany, cancellationToken);
}
公共异步任务SetPortfolioCompanyStatus([FromBody]PortfolioCompany PortfolioCompany,CancellationToken CancellationToken=default(CancellationToken))
{
如果(portfolioCompany==null)
抛出新ArgumentNullException(nameof(portfolioCompany));
如果(portfolioCompany.Id)需要任何澄清,请让我知道问题在于UpdatePortfolioCompany
的设置。Moq使用equals方法检查标识,您使用一个实例设置方法,然后使用另一个实例调用它,我想这两个实例不相等……我的意思是moqData.PortfolioCompanys[0]
和产品
(我确实希望PortfolioCompany
不会覆盖Equals方法或实现IEquatable…)@johnny感谢您的回复。那么您认为我可以如何解决这个问题?请看产品是我在这里创建的一个列表,只是为了更新值。Moqdata.PortfolioCompanys[0]这也是一个列表,您可以在顶部看到我有6条记录。您能帮我解决这个问题吗?有很多方法可以解决它,关键是要理解它。例如,尝试使用moqData.portfolioCompanies[0]
而不是产品
@johnny那么我将如何发送必须更新的数据。因此,基本上在本例中,我更新的是isactive,这是真到假