2017-03-03 27 views
0

我有像這樣如何利用TDD去除部分面向公衆的部分API?

public class Foo : ICompletable 
{ 
    public IAmCompleted { get; set;} // from interface 
    private IFooCollab collab; 

    public Foo(IFooCollab collab) 
{ 
    this.collab = collab; 

} 

public YouCompleteMe() 
{ 
    this.collab.command(); 
this. IAmCompleted = true; 

} 

[TestFixture] 
public class Tests 
{ 
public void when_i_am_completed_then_completed_is_true() 
{ 
    var sut = new Foo(new mock<IFooColab>().object); 
    Assert.That(sut.IsCompleted, Is.True); 
} 


[Test] 
public void when_i_am_completed_command_is_issued() 
{ 
var collabMock = new mock<IFooCollab>(); 
...sut blah 
    collabMock.verify(x => x.command(), Times.Once) 
} 
} 

卸下接口和任何使用它L A類是所有我需要做的。我應該如何從測試中推動這一點,甚至應該如此。如果我刪除測試,功能仍然存在。 Id幾乎說相反,打破prod代碼打破測試:) grd ..綠色紅色刪除

+0

在公交車上有人請格式爲先生。 – brumScouse

+0

我想知道爲什麼公衆是公開的;) – ApolloSoftware

+0

我不是TDD的專家,但是你能否使用反射來測試接口不再存在,你應該刪除? – Tim

回答

1

刪除未使用的代碼是重構步驟的一部分。如果代碼確實不是必需的,您可以將其刪除並運行現有的測試,並且所有內容都應通過。

+0

只是澄清有測試使IAmCompleted屬性斷言我應該先更改接口,然後更正失敗的測試?通過刪除它們? – brumScouse

+0

嚴格來說,您應該先更改或刪除測試,因爲它們不再正確描述您的要求。但是讓計算機運行它們並查看失敗的結果可能會更容易讓您找到不正確的測試。 –

+0

我想它是一個偏好問題?這可能會變得非常虔誠。我發現的更難的事情之一是捍衛我決定採取某種方法。即使在邏輯上,它是有道理的,結果是一樣的。...... – brumScouse