diff --git a/dev/tests/unit/testsuite/Magento/Sales/Model/Order/Creditmemo/Total/DiscountTest.php b/dev/tests/unit/testsuite/Magento/Sales/Model/Order/Creditmemo/Total/DiscountTest.php
index 4c52a6626af3cebf25e6033ad1645196a7f6f02c..660fec3b44f5bb5b01faa2762b077a0b0707d010 100644
--- a/dev/tests/unit/testsuite/Magento/Sales/Model/Order/Creditmemo/Total/DiscountTest.php
+++ b/dev/tests/unit/testsuite/Magento/Sales/Model/Order/Creditmemo/Total/DiscountTest.php
@@ -7,7 +7,7 @@
 namespace Magento\Sales\Model\Order\Creditmemo\Total;
 
 /**
- * Class CostTest
+ * Class DiscountTest
  */
 class DiscountTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/dev/tests/unit/testsuite/Magento/Sales/Model/Order/Creditmemo/Total/SubtotalTest.php b/dev/tests/unit/testsuite/Magento/Sales/Model/Order/Creditmemo/Total/SubtotalTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..1cfa0bb6b04a63073c15be91e5f53d532600f442
--- /dev/null
+++ b/dev/tests/unit/testsuite/Magento/Sales/Model/Order/Creditmemo/Total/SubtotalTest.php
@@ -0,0 +1,119 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Sales\Model\Order\Creditmemo\Total;
+
+/**
+ * Class SubtotalTest
+ */
+class SubtotalTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Sales\Model\Order\Creditmemo\Total\Subtotal
+     */
+    protected $total;
+    /**
+     * @var \Magento\Sales\Model\Order\Creditmemo|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $creditmemoMock;
+    /**
+     * @var \Magento\Sales\Model\Order\Creditmemo\Item|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $creditmemoItemMock;
+    /**
+     * @var \Magento\Sales\Model\Order\Item|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $orderItemMock;
+
+    public function setUp()
+    {
+        $this->orderMock = $this->getMock('Magento\Sales\Model\Order', [
+            'getBaseShippingDiscountAmount', 'getBaseShippingAmount', 'getShippingAmount'
+        ], [], '', false);
+        $this->orderItemMock = $this->getMock('Magento\Sales\Model\Order',
+            [
+                'isDummy', 'getDiscountInvoiced', 'getBaseDiscountInvoiced', 'getQtyInvoiced', 'getQty',
+                'getDiscountRefunded', 'getQtyRefunded'
+            ], [], '', false);
+        $this->creditmemoMock = $this->getMock('\Magento\Sales\Model\Order\Creditmemo', [
+            'setBaseCost', 'getAllItems', 'getOrder', 'getBaseShippingAmount', 'roundPrice', 'setDiscountAmount',
+            'setBaseDiscountAmount', 'setSubtotal', 'setBaseSubtotal', 'setSubtotalInclTax', 'setBaseSubtotalInclTax',
+            'getGrandTotal', 'setGrandTotal', 'getBaseGrandTotal', 'setBaseGrandTotal'
+        ], [], '', false);
+        $this->creditmemoItemMock = $this->getMock(
+            '\Magento\Sales\Model\Order\Creditmemo\Item',
+            [
+                'getHasChildren', 'getBaseCost', 'getQty', 'getOrderItem', 'setDiscountAmount',
+                'setBaseDiscountAmount', 'isLast', 'getRowTotalInclTax', 'getBaseRowTotalInclTax',
+                'getRowTotal', 'getBaseRowTotal', 'calcRowTotal'
+            ],
+            [],
+            '',
+            false
+        );
+        $this->total = new \Magento\Sales\Model\Order\Creditmemo\Total\Subtotal();
+    }
+
+    public function testCollect()
+    {
+        $this->creditmemoMock->expects($this->once())
+            ->method('getAllItems')
+            ->willReturn([$this->creditmemoItemMock]);
+        $this->creditmemoItemMock->expects($this->atLeastOnce())
+            ->method('getOrderItem')
+            ->willReturn($this->orderItemMock);
+        $this->orderItemMock->expects($this->once())
+            ->method('isDummy')
+            ->willReturn(false);
+        $this->creditmemoItemMock->expects($this->once())
+            ->method('calcRowTotal')
+            ->willReturnSelf();
+        $this->creditmemoItemMock->expects($this->once())
+            ->method('getRowTotal')
+            ->willReturn(1);
+        $this->creditmemoItemMock->expects($this->once())
+            ->method('getBaseRowTotal')
+            ->willReturn(1);
+        $this->creditmemoItemMock->expects($this->once())
+            ->method('getRowTotalInclTax')
+            ->willReturn(1);
+        $this->creditmemoItemMock->expects($this->once())
+            ->method('getBaseRowTotalInclTax')
+            ->willReturn(1);
+
+        $this->creditmemoMock->expects($this->once())
+            ->method('setSubtotal')
+            ->with(1)
+            ->willReturnSelf();
+        $this->creditmemoMock->expects($this->once())
+            ->method('setBaseSubtotal')
+            ->with(1)
+            ->willReturnSelf();
+        $this->creditmemoMock->expects($this->once())
+            ->method('setSubtotalInclTax')
+            ->with(1)
+            ->willReturnSelf();
+        $this->creditmemoMock->expects($this->once())
+            ->method('setBaseSubtotalInclTax')
+            ->with(1)
+            ->willReturnSelf();
+        $this->creditmemoMock->expects($this->once())
+            ->method('getGrandTotal')
+            ->willReturn(1);
+        $this->creditmemoMock->expects($this->once())
+            ->method('setGrandTotal')
+            ->with(2)
+            ->willReturnSelf();
+        $this->creditmemoMock->expects($this->once())
+            ->method('getBaseGrandTotal')
+            ->willReturn(1);
+        $this->creditmemoMock->expects($this->once())
+            ->method('setBaseGrandTotal')
+            ->with(2)
+            ->willReturnSelf();
+        $this->assertEquals($this->total, $this->total->collect($this->creditmemoMock));
+    }
+}