[ 測試撰寫 ] LeetCode 141. Linked List Cycle #122
-
|
相關 Discussions: LeetCode: 其實不知道該怎麼測試 😅,所以我寫了一個方法去驗證是否為 valid index using Xunit;
public class UnitTestLinkedListCycle
{
bool IsValidCycleIndex(int[] nodeValue, int cycleIndex)
{
if (cycleIndex == -1) { return false; }
int count = 0;
while (count < nodeValue.Length)
{
if (count == cycleIndex)
{
return true;
}
++count;
}
return false;
}
[Fact]
public void LeetCodeExample1()
{
var node1 = new ListNode(3);
var node2 = new ListNode(2);
var node3 = new ListNode(0);
var node4 = new ListNode(-4);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node2;
Assert.Equal(IsValidCycleIndex(new int[] { 3, 2, 0, -4 }, 1),
new LinkedListCycle().HasCycle(node1));
}
[Fact]
public void LeetCodeExample2()
{
var node1 = new ListNode(1);
var node2 = new ListNode(2);
node1.next = node2;
node2.next = node1;
Assert.Equal(IsValidCycleIndex(new int[] { 1, 2 }, 0),
new LinkedListCycle().HasCycle(node1));
}
[Fact]
public void LeetCodeExample3()
{
var node1 = new ListNode(1);
Assert.Equal(IsValidCycleIndex(new int[] { 1 }, -1),
new LinkedListCycle().HasCycle(node1));
}
[Fact]
public void maxNodeValue()
{
var node1 = new ListNode(100000);
var node2 = new ListNode(1000);
var node3 = new ListNode(10);
node1.next = node2;
node2.next = node3;
node3.next = node3;
Assert.Equal(IsValidCycleIndex(new int[] { 100000, 1000, 10 }, 2),
new LinkedListCycle().HasCycle(node1));
}
[Fact]
public void minNodeValue()
{
var node1 = new ListNode(-100000);
var node2 = new ListNode(-10);
var node3 = new ListNode(0);
var node4 = new ListNode(2);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node4;
Assert.Equal(IsValidCycleIndex(new int[] { -100000, -10, 0, 2 }, 3),
new LinkedListCycle().HasCycle(node1));
}
} |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments
-
|
你好 😊 你有把 LeetCode 給的 3 組範例的「 setup (建置測試資料) 」的部分寫得很好,最後的「 public void LeetCodeExample1()
{
// ...
Assert.Equal(true, new LinkedListCycle().HasCycle(node1));
}
[Fact]
public void LeetCodeExample2()
{
// ...
Assert.Equal(true, new LinkedListCycle().HasCycle(node1));
}
[Fact]
public void LeetCodeExample3()
{
// ...
Assert.Equal(false, new LinkedListCycle().HasCycle(node1));
}就這題的情形來說,「選擇具有代表性的測試案例,直接 hard-code 期待值,與 實際值 比對」是比較適當的作法。 比較完整的觀念可以參考 https://martinfowler.com/articles/mocksArentStubs.html
這題的重點在於「 cycle 的有無」,而「每個節點的值」的影響就相對的小很多;若是我,我會拿掉 |
Beta Was this translation helpful? Give feedback.
-
這個部分,以我目前的程度很難立即消化,我會慢慢看。 謝謝 @twy30 大大 orz |
Beta Was this translation helpful? Give feedback.
@LPenny-github
你好 😊
你有把 LeetCode 給的 3 組範例的「 setup (建置測試資料) 」的部分寫得很好,最後的「
Assert(驗證) 」的部分可以改成以下這樣:就這題的情形來說,「選擇具有代表性的測試案例,直接 hard-code 期待值,與 實際值 比對」是比較適當的作法。
比較完整的觀念可以參考 https://martinfowler.com/articles/mocksArentStubs.html