Разработка через тестирование означает, что Вы прекращаете кодировать, когда все Ваши тесты передают.
, Если у Вас нет теста для свойства, тогда почему необходимо реализовать его? Если Вы не тестируете/определяете ожидаемое поведение в случае "недопустимого" присвоения, что должно сделать свойство?
Поэтому я полностью для тестирования каждого поведения, которое должен показать класс. Включая "примитивные" свойства.
Для создания этого тестирования легче я создал простой NUnit TestFixture
, который обеспечивает точки расширения для установки/получения значения и берет списки допустимых и недопустимых значений и имеет единственный тест, чтобы проверить, работает ли свойство правильно. Тестирование единственного свойства могло быть похожим на это:
[TestFixture]
public class Test_MyObject_SomeProperty : PropertyTest<int>
{
private MyObject obj = null;
public override void SetUp() { obj = new MyObject(); }
public override void TearDown() { obj = null; }
public override int Get() { return obj.SomeProperty; }
public override Set(int value) { obj.SomeProperty = value; }
public override IEnumerable<int> SomeValidValues() { return new List() { 1,3,5,7 }; }
public override IEnumerable<int> SomeInvalidValues() { return new List() { 2,4,6 }; }
}
Используя лямбды и атрибуты это могло бы даже быть записано более сжато. Я заключаю, что MBUnit имеет даже некоторую собственную поддержку подобных вещей. Точка, хотя то, что вышеупомянутый код получает намерение свойства.
P.S.: Вероятно, PropertyTest должен также иметь способ проверить, что другой свойства на объекте не изменились. Хм.. назад к исходной точке.
Подход, который вам необходимо предпринять, - сделать этот желаемый столбец GridView полем шаблона. Когда вы используете поля шаблона, вы можете вставить любые элементы управления asp.net в каждый основной раздел элемента управления gridview (заголовок, элемент, нижний колонтитул и т. Д.). Я не тестировал это, но в основном это выглядит так:
<asp:GridView ID="Gridview1" runat="server">
<Columns>
<asp:BoundField DataField="yourDbColumnName" HeaderText="id" />
<asp:BoundField DataField="yourDbColumnName" HeaderText="name" />
<asp:TemplateField>
<HeaderTemplate>
<asp:Button runat="server" ID="btnFamily" CommandName="FamilyClicked" />
</HeaderTemplate>
<ItemTemplate>
<asp:Literal runat="server" ID="litFamily" Text='<%# EVAL("YourDbColumnValue") %>'></asp:Literal>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Чтобы «захватить» событие нажатия кнопки и что-то с ним сделать, вам нужно использовать событие RowCommand GridView (вот отправная точка - снова непроверено):
Protected Sub Gridview1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles Gridview1.RowCommand
If e.CommandName = "FamilyClicked" Then
' they clicked by grid view header's asp:button control...
Response.Write("TEST")
End If
End Sub
Магия здесь заключается в назначении вашей кнопки свойству CommandName (в данном случае я установил для него значение «FamilyClicked», но это может быть все, что вы захотите).
Вот еще некоторые основы технологии поля шаблона, которую использует GridView - текст ссылки
Надеюсь, что это поможет.
, это фактически LinkButton. вы можете использовать CSS, чтобы придать им вид настоящей кнопки .
однако это вряд ли было бы элегантно, в то время как тенденция в дизайне на самом деле заключается в использовании ссылок вместо кнопок (посмотрите на любые популярное веб-приложение, которое вы любите, в том числе это)