Zum Inhalt springen

lbm1305

Mitglieder
  • Gesamte Inhalte

    373
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von lbm1305

  1. Wenn es nur um das Starten der Konsolenanwendnung geht, dann hilft dir folgender Link: Process.Start Method (String, String) (System.Diagnostics) EDIT: War einer schneller ;-)
  2. 1) Die Assembly heißt tatsächlich nur 'Projekt' ? 2) Hat die aufrufende Assembly einen Verweise auf die Assembly, in der die Klassen liegen? Ggf kann man auch so vorgehen. var type = typeof(user_data); var assemblyQualifiedName = type.AssemblyQualifiedName; Version, Culture und PublicKeyToken kann man weglassen
  3. Die genaue Bezeichnung ist 'AssemblyQualifiedName'. Für eine Beispielklasse 'UserData' kann dieser wie folgt aussehen: 'DemoApp.DataSource.UserData, DemoApp' Dabei liegt diese Klasse 'UserData' in eine Assembly namens 'DemoApp' => DataSource ist der Namespace, in dem die Klasse liegt. var path = @"DemoApp.DataSource.UserData, DemoApp"; var type = Type.GetType(path); if (type != null) { var instance = Activator.CreateInstance(type); } 'instance' ist 'object' und muss entweder auf den konkreten Typ gecasted werden oder Du kannst die Instanz per Reflection weiter bearbeiten. Versuche bitte die Begriffe zu verwenden, die im .NET-Umfeld typischerweise benutzt werden. Eigenschaften / Properties (Private) Felder Methoden Klassen Attribute werden zum annotieren von Klassen, Methoden, Eigenschaften usw. benutzt.
  4. Was verstehst Du unter "Attribut" Attribute im .NET können nur konstante Wert übernehmen. D.h. diese müssen zur Entwurfszeit beeits feststehen. Das Auswerten eines Attributes erfolgt mit Hilfe von Reflection. // Pseudocode [Required] [StringLength(25, ErrorMessage="Länge max. 25 Zeichen")] public string Name { get; set; } EDIT: Wie sieht so ein "Name" einesObjektes aus? Wenn den vollqualifizierten Namen der Klasse hast, kannst du mit Reflection arbeiten.
  5. Die Seite von ASP.NET erklärt viel anhand von Beispielprojekten. Verweist auch auf kostenlose Video-Serien bei Pluralsight. MVA => Video-Serien, die viele Themen abdecken, so auch ASP.NET MVC
  6. Anbei das Beispiel mit einer ASP.NET MVC Anwendung // Controller public class ValuesController : Controller { public ActionResult Index() { var persons = LoadPeople(); return View(persons); } private IEnumerable<Person> LoadPeople() { return new List<Person> { new Person { FirstName = "Hans", LastName = "Wurst" }, new Person { FirstName = "Peter", LastName = "Pan" } }; } } public class Person { public string FirstName { get; set; } public string LastName { get; set; } } // View <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<System.Collections.Generic.IEnumerable<MvcApplication1.Controllers.Person>>" %> <!DOCTYPE html> <html> <head runat="server"> <meta name="viewport" content="width=device-width" /> <title>Index</title> </head> <body> <div> <ul> <% foreach (var person in Model) { %> <li> <span><%= person.FirstName %> <%= person.LastName %></span> </li> <% } %> </ul> </div> </body> </html> Da ich eher die Razor-Engine bevorzuge, falls wir mal was mit MVC machen, kann es sein, die Aussage von mir betreffs den Steuerelementen von ASP.NET nicht 100%ig richtig ist :-) Als erste Anlaufstelle würde ich die Seite asp.net empfehlen. Ansonsten Microsoft Virtual Academy
  7. Hast Du eine ASP.NET MVC oder ASP.NET WebForms Anwendung? Im ersten Post schreib Du etwas von 'asp:' Tags und jetzt etwas von MVC. Bei MVC brauchst Du keine Benutzersteuerelemente von ASP.NET Mein Beispiel ist für eine WebForms-Anwednung.
  8. Hier ein schnelles Beispiel: public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { repeater1.DataSource = LoadPeople(); repeater1.DataBind(); } private IEnumerable<Person> LoadPeople() { return new List<Person> { new Person { FirstName = "Hans", LastName = "Wurst" }, new Person { FirstName = "Peter", LastName = "Pan" } }; } } public class Person { public string FirstName { get; set; } public string LastName { get; set; } } <ul> <asp:Repeater runat="server" ID="repeater1" > <ItemTemplate> <li><%# ((Person)Container.DataItem).FirstName %></li> </ItemTemplate> </asp:Repeater> </ul> es gibt aber noch genügend andere datengebundene steuerelemente, die zur darstellung genutzt werden können.
  9. Uhhh...Die aspx-Datei sollte nur den Code für die Darstellung beinhalten. Jede aspx-Datei hat eine Code-Behind-Datei, in der man die Steuerelemente, die mit dem 'runat="server"' ausgestattet sind, über die ID ansprechen kann. Der Aufruf der Daten und das Zuweisen der Daten sollte also im Hintergrund passieren.
  10. Kurze Test: In der Masterpage im Kopfbereich: <%@ Import Namespace="WebApplication1.Model" %> Dann weiter, irgendwo in der Seite steht <% if( ((User)(Session["User"])).HasPermission()) { %> <h1>Hallo Welt</h1> <% } %> Im Namensraum Model, was nur ein eigener Ordner ist, befindet sich die Klasse User.
  11. Scheinbar hast Du hier eine andere Frage, was einen neuen Thread / ein neues Thema rechtfertigen würde. Grund: Falls ein andere Benutzer das gleiche oder ein ähnliches Problem hat, würde es nicht so schnell finden.
  12. warum bleibst du dann nicht bei php? wenn es etwas mit der frage zu asp.net zu tun hat, kann man doch sicherlich per REST eine abfrage auf einen php-service machen. dann kannst du dein "gewohntes" umfeld nutzen. ansonsten solltest du dich von dem "gewohnten" trennen. zuerst...die klasse hat zuviele aufgaben. aber egal. möglichkeit a) für jede abfrage ein "command-bbjekt" erstellen, welches ein vordefiniertes typisiertes ergebnis zurück gibt einen action-delegate an fetch übergeben, der dann vom benutzer / entwickler angepasst werden kann. // pseudocode void Fetch(Action<DbDataReader> action) { // Verbindung herstellen // Abfrage ausführen // Ergebnis auswerten DbDataReader reader = null; action(reader); // Verbindung schließen. } .... // Aufruf Customer customer = null; Db.Fetch( reader => { if (reader.HasRows) { customer = new Customer { Id = reader.GetInt32() }; } });
  13. Sorry...der Code sagt nichts darüber aus, was Du mit der Klasse, die eh zuviel macht, erreichen möchtest. Auch das Eröffnungspost lässt darauf nicht schließen. Du sagst, du willst keine Reader rausgeben? Aber was macht die Fetch-Methode ohne Parameter? Wenn Du das Ziel, welches Du erreichen möchtest, entweder durch Pseudocode oder mit Sätzen genauer beschreiben könntest, wäre Dir sicherlich mehr geholfen.
  14. Uuhhh...bei dem do-while wird einem ja schlecht. warum nicht so? //Pseudocode var reader = db.fetch(); if (reader == null || !reader.HasRows) { return; } while (reader.Read()) { var ordinal = reader.GetOrdinal("NamederSplate"); var result = reader.GetInt32(ordinal); }
  15. Nun...zuerst liefert Dir die 'fetch' Methode ein Objekt vom Typ 'DbDataReader'. data ist sicherlich vom Typ 'Boolean'. Und wie es die Meldung bereits mitteilt, kann ein DbDataReader nicht in ein bool umgewandelt werden. Man kann die enthaltenen Zeilen eine DataReader mit einer while-Schleife durchlaufen. am Beispiel eines SqlDataReaders: SqlDataReader.Read-Methode (System.Data.SqlClient)
  16. Moin, vielleicht hilft Dir dieser Artikel von Josh Smith: How to Test a Class Which Uses DispatcherTimer - CodeProject Auf der anderen Seite muss man den DispatcherTimer nicht testen, denn der wird funktionieren. Was getestet werden sollte: Wird die Aktion auch nach x Sekunden aufgerufen. Wichtig wäre noch, den Timer nach einem Test zurückzusetzen, denn sonst kann dieser eventuell endlos laufen, wenn man bspw. Software wie NCrunch benutzt.
  17. Nur zur Bemerkung: Mit der MessageBox meinte ich den Platz, wo diese aufgerufen wird, nicht die Klasse selber. Was man eben oft sieht, dass Dialoge (wie bspw. MessageBox) direkt aus dem ViewModel aufgerufen werden. Besser ist es, wie bereits mehrfach angesprochen, diese Dialoge zu kapseln. :-)
  18. Die Exception wird im Catch-Block bereits behandelt. Leider lässt sich durch den Code-Schnipsel nicht sehen, in welcher Klasse die Excpetion gefangen wird. Von der Messagebox ausgehend, denke ich, dass es sich um ein ViewModel handelt. Beim MMMV-Pattern sollte ein DialogService verwendet werden, welcher durch ein Interface definiert wurde. Dann kann man den DialogService als Fake / Mock reinreichen und überprüfen, ob das Fake-Objekt aufgerufen wurde. Wenn die Exception weitergeworfen werden soll bzw. wird, dann kann man dies so testen. Pseudocode: public string TestString { get { return _testString; } set { SetProperty(ref _testString, value); LoadDocument(value); } } private void LoadDocument(string value) { try { var document = new XmlDocument(); document.Load(value); } catch (Exception ex) { throw; } } Pseudocode: [Test] public void Test2() { var applicationSettingsFake = A.Fake<IApplicationSettings>(); applicationSettingsFake.CallsTo(settings => settings.Custom).Returns("Der Rückgabewert"); var customViewModel = new CustomViewModel(applicationSettingsFake); Assert.Throws<ArgumentException>(() => customViewModel.TestString = string.Empty); }
  19. Es war sicherlich etwas ungünstig ausgedrückt. Sicherlich gehe ich nicht hin und wrappe alles, was das .NET Framework bietet. Da Settings nicht nur aus einer *.config Datei kommen können, mach es hier Sinn, die Klasse ConfigurationManager wegzukapseln. Kommt darauf an, wie man Tests organisiert. Ich persönlich nutzte aber auch nicht das TestCase-Attribute ;-)
  20. Persönlich versuche ich Teile, die aus dem .NET Framework kommen, zu wrappen. Für den ConfigurationManager würde es dann eine "Setingsklasse" geben, die intern auf den ConfigurationManager zugreift. Der Zugriff auf die .config muss in meine Aufgen nicht getestet werden, da MS dies (hoffentlich) bereits gemacht hat. In den Test kannt dann das jeweilige Property konfiguriert werden. public class CustomViewModel { private readonly IApplicationSettings _applicationSettings; /// <summary> /// Initialisiert eine neue Instanz der <see cref="T:System.Object"/>-Klasse. /// </summary> public CustomViewModel(IApplicationSettings applicationSettings) { _applicationSettings = applicationSettings; } public string CompleteString { get { return _applicationSettings.Custom; } } public string PartString { get { return "Deine Ergebnis aus Regex"; } } } [Test] public void Test1() { string expected = ""; var applicationSettingsFake = A.Fake<IApplicationSettings>(); applicationSettingsFake.CallsTo(settings => settings.Custom).Returns("Der Rückgabewert"); var customViewModel = new CustomViewModel(applicationSettingsFake); var actual = customViewModel.PartString; Assert.That(expected, Is.EqualTo(actual)); } Ggf. kann man auch mehrere Testfälle je TestMethode abdecken. Dafür kann Du das TestCase Attribute verwenden. Hier müsstest Du die aktuelle Url übergeben und das erwartete Resultat. EDIT: Das Mock bzw. Fake-Objekt sollte, wenn benötigt, immer Daten für den jeweiligen Testfall liefern.
  21. Bei jedem Entwickler kann es anders aussehen :-) Beispiel entspricht zwar nicht Deiner Beschreibung, aber es demonstriert vielleicht, wie ein Test ausehen könnte. Pseudocode: public class CreateUserViewModel : BindableBase { private readonly IUserService _userService; private string _firstName; private string _lastName; public CreateUserViewModel(IUserService userService) { _userService = userService; CreateUserCommand = new DelegateCommand(ExecuteCreateUserCommand); } public ICommand CreateUserCommand { get; private set; } public string FirstName { get { return _firstName; } set { SetProperty(ref _firstName, value); } } public string LastName { get { return _lastName; } set { SetProperty(ref _lastName, value); } } private void ExecuteCreateUserCommand() { var user = new UserModel { FirstName = FirstName, LastName = LastName }; _userService.Save(user); } } So oder so könnte ein Test dafür aussehen. Pseudocode: [TestFixture] public class Wenn_ein_neuer_Benutzer_angelegt_wird { private CreateUserViewModel _createUserViewModel; private IUserService _fakeUserService; [TestFixtureSetUp] public void Initialize() { _fakeUserService = A.Fake<IUserService>(); _createUserViewModel = new CreateUserViewModel(_fakeUserService); _createUserViewModel.FirstName = "Max"; _createUserViewModel.LastName = "Mustermann"; } [Test] public void Sollte_der_Service_einmal_aufgerufen_werden() { _createUserViewModel.CreateUserCommand.Execute(null); _fakeUserService.CallsTo(s => s.Save(A<UserModel>.Ignored)).MustHaveHappened(Repeated.Exactly.Once); } } Testframework => NUnit Zum Faken => FakeItEasy Prism 5
  22. Meiner Meinung nach müssen Properties nicht darauf getestet werden, ob das PropertyChangedEvent ausgeführt wird. Eher sollten die Aktionen getestet werden, die ausgeführt werden, wenn eine gültige bzw. ungültige URL eingegeben wird. Dependency Injection hat indirekt etwas mit Testen zu tun. Jede Klasse sollte nur ein Belang haben. Somit kann es passieren, dass Klassen Abhängigkeiten zu anderen Klassen haben. Die Abhängigkeiten werden über Schnittstellen in die jeweiligen Klassen injiziert, welche im Test als Mock / Fake übergeben werden. Stichwort hier: SOLID => 5 Prinzipen in der Softwareentwicklung.
  23. lbm1305

    Vergleich

    foreach (string strFileName in lstFiles) { txtProtocol.Text += DateTime.Now + " Bildbezeichnung ---> " + strFileName + ".jpg" + " Existiert ---> "; txtProtocol.Text += (from dFiles in dInfo.GetFiles() where dFiles.Name == strFileName + ".jpg" select dFiles).Count() > 0; txtProtocol.Text += Environment.NewLine; } Bei jedem Schleifendurchlauf wird DirectoryInfo.GetFiles() aufgerufen. Ist wenig sinnvoll und unnötig.
  24. schreibe doch mal bitte in punkten auf, welche schritte dein code macht? bspw. 1. dateinamen aus txt-datei auslesen (hier gibt es die möglichkeit, dies zeilenweise zu machen oder alle auf einmal) 2. für jeden dateinamen aus der datei ... 3. operationen auf den aktuell selektierten dateinamen ...und hier musst du jetzt überlegen, wie der ablauf aussehen soll. ansonsten kann man true und false auch als string ausgeben der großteil hier wird dir die lösung nicht vorkauen, weil es dann keinen lerneffekt hat.
  25. Im zweiten Post wurde Dir vorgeschlagen, den Ablauf in Worte zu fassen und ggf. als Aufzählung niederzuschreiben. Für jeden Punkt kann man dann den entsprechenden Code schreiben.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...