[TestMethod]
public void UserApplicationService_SignOut_ForExistingUserWithBalance_ShouldClearBalanceAndSignOut()
{
//Arrange
long merchantId = 1;
long userId = 1;
var transactionId = "001";
var id = "122";
var user = Help.SetId<User>(User.Register(id, new DateTime(2015, 01, 01, 00, 00, 01)), userId);
_usersDb.Add(user);
var userBonusBalanceRepository = _testContext.MoqUnitOfWork.MockUnitOfWork.Object.GetUserBonusAccountRepository();
UserBonusAccount uba = userBonusBalanceRepository.GetForUser(user);
uba.PayTo(
new Domain.Core.Money { TotalAmount = 10, BonusAmount = 0 },
new Domain.Core.Outlet
{
BonusPercentage = 50,
IsLoyalty = true,
Id = id,
OutletId = "111"
},
transactionId,
DateTime.Now);
userBonusBalanceRepository.Update(uba);
//Act
_testContext.UserApplicationService.SignOut(id);
//Assert
var firstOrDefault = this._balances.FirstOrDefault(x => x.UserId == user.Id && x.MerchantId == merchantId);
Assert.IsTrue(firstOrDefault != null && firstOrDefault.Balance == 0);
Assert.IsNotNull(this._transactions.Where(x => x.Id == transactionId && x.Type == BonusTransactionType.EraseFunds));
}
域单元测试
[TestMethod]
public void UserBonusAccount_ClearBalances_shouldClearBalancesForAllMerchants()
{
long userId = 1;
long firstMerchantId = 1;
long secondMerchantId = 2;
User user = User.Register("111", new DateTime(2015, 01, 01, 00, 00, 01));
Shared.Help.SetId(user, userId);
List<BonusTransaction> transactions = new List<BonusTransaction>();
List<BonusBalance> balances = new List<BonusBalance>();
var userBonusAccount = UserBonusAccount.Load(transactions.AsQueryable(), balances.AsQueryable(), user);
userBonusAccount.PayTo(new Money {TotalAmount = 100, BonusAmount = 0},
new Outlet
{
BonusPercentage = 10,
IsLoyalty = true,
MerchantId = firstMerchantId,
OutletId = "4512345678"
}, "001", DateTime.Now);
userBonusAccount.PayTo(new Money {TotalAmount = 200, BonusAmount = 0},
new Outlet
{
BonusPercentage = 10,
IsLoyalty = true,
MerchantId = secondMerchantId,
OutletId = "4512345679"
}, "002", DateTime.Now);
userBonusAccount.ClearBalances();
Assert.IsTrue(userBonusAccount.GetBalanceAt(firstMerchantId) == 0);
Assert.IsTrue(userBonusAccount.GetBalanceAt(secondMerchantId) == 0);
}
正如您所看到的,这两个测试都检查用户余额是否为0,这是域责任。因此,问题是:应用层单元测试应该是什么样子的,它应该测试什么?我在某处读到单元测试应该在“流控制的应用服务和业务规则的域模型”中进行测试。谁能再详细说明一下,给出一些例子,应用层单元测试应该测试什么,看起来是什么样子的吗?
app服务的职责包括输入验证、安全和事务控制。所以这是你应该测试的!
下面是一些app服务单元测试应该提供并回答的示例问题:
我的应用程序服务...
您的单元测试包含一些代码气味。
例如,我总是在单元测试中直接实例化SUT(测试中的系统)。这样,您就可以确切地知道它有哪些依赖关系,以及它们中的哪些是被丢弃的、被嘲弄的,或者是被使用的是真正的依赖关系。在你的测试中,这一点并不清楚。
我写了一个程序来模拟商店里的篮子。用户可以添加和删除篮子中的物品。现在,我想知道,我(void)方法的单元测试应该是什么样子。我正在使用JUnit4。 我试图更改我的方法以返回布尔类型,而不是什么都不返回。有了它,我就可以编写简单的
问题内容: 第3、16、17、18和19行用*突出显示的含义是什么。有人可以解释他们的工作吗?我是python和编程新手 问题答案: 这段代码中只有三行用*突出显示,但这是它们的意思: 第一行: 这是在声明 后面 的函数( test_Iframe 和 tearDown )的 类* 。在面向对象的编程中,使用一个类来创建“对象” 。可以将 类 视为数据/过程的抽象,而 对象 是类的特定实例。 ***
问题内容: 第3、16、17、18和19行用*突出显示的含义是什么。有人可以解释他们的工作吗?我是python和编程新手 问题答案: 此代码中只有三行用*突出显示,但这是它们的含义: 第一行: 这是在声明 后面 的函数( test_Iframe 和 tearDown )的 类* 。在面向对象的编程中,使用一个类来创建“对象” 。可以将 类 视为数据/过程的抽象,而 对象 是类的特定实例。 ***
问题内容: 您能用几句话来解释一下吗: 为什么我们需要它/为什么它们使我们的生活更轻松? 如何对[Java中的简单示例]进行单元测试? 什么时候我们不需要它们/项目类型,我们可以不进行单元测试? 有用的链接 问题答案: 为什么我们需要它/为什么它们使我们的生活更轻松? 它允许您检查要测试的代码段的预期行为,并作为它必须满足的合同。 它还允许您安全地重构代码,而不会破坏其功能(合同)。 它使您可以通
假设在下面的Maven项目结构中有和。 在IntelliJ IDEA中,有一个名为包和类的选项,可以将用于缩小代码覆盖率范围的数据包含在覆盖率中。 我想知道,例如,如果我想查看的覆盖率,我应该向本节添加哪些包?我认为,当我编写这个单元测试仅用于测试时,可以只将或其包添加到要包括在覆盖率数据部分的包和类中。那是真的吗?或者什么是正确的方法?
在我的应用程序中,我有以下层: 表示层 Web服务层 应用程序服务层 域层 基础结构层