Unit Testing Datalayer written in ADO.net
I think this ID should be generated at database level (autoincrement). But let's ignore this, for testing you have to make sure your methods do not have a dependency on eachother. 

It would be better if you write it like this

public void DoSomething(long someValue, long id) 
{
     // Insert new value
}

public long GetInsertId() 
{
     // Return ID
}


Now you can test these methods independently

public void GetInsert_ShouldReturnNewId()
{
     // Your requirements for a new ID should be tested here
}

public void DoSomething_ShouldInsertNewRecord()
{
    var sut=new ConcreteImplementation();
    var id = sut.GetInsertId();

    sut.DoSomething(13, id);
}


By using this approach the developer MUST provide an ID. The developer can obtain an ID by calling your new method. Just keep in mind that if you want to make your code more testable you have to make your methods independant. They must work on there own.